填充列表列表,使其等于最大列表的大小

vka*_*l11 2 python

我有一个句子列表列表,我想填充所有句子,使它们具有相同的长度。

我能够做到这一点,但我正在努力寻找最优化的做事方式并挑战自己。

max_length = max(len(sent) for sent in sents)
list_length = len(sents)
sents_padded = [[pad_token for i in range(max_length)] for j in range(list_length)]
for i,sent in enumerate(sents):
    sents_padded[i][0:len(sent)] = sent 
Run Code Online (Sandbox Code Playgroud)

我使用了输入:

sents = [["Hello","World"],["Where","are","you"],["I","am","doing","fine"]]
pad_token = "Hi"
Run Code Online (Sandbox Code Playgroud)

我的方法是有效的方法还是有更好的方法?

Ken*_*rom 8

itertools(在 python3 中)提供了用于迭代的功能,使用 zip_longest,您可以使用 zip(*) 正常反转它,如果您更喜欢迭代器,则将其传递给 list 。

import itertools
from pprint import pprint

sents = [["Hello","World"],["Where","are","you"],["I","am","doing","fine"]]
pad_token = "Hi"

padded = zip(*itertools.zip_longest(*sents, fillvalue=pad_token))
pprint (list(padded))
Run Code Online (Sandbox Code Playgroud)

[['Hello', 'World', 'Hi', 'Hi'],
['Where', 'are', 'you', 'Hi'],
['I', 'am', 'doing', '美好的']]