我有一个句子列表列表,我想填充所有句子,使它们具有相同的长度。
我能够做到这一点,但我正在努力寻找最优化的做事方式并挑战自己。
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)
我的方法是有效的方法还是有更好的方法?
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', '美好的']]
| 归档时间: |
|
| 查看次数: |
4414 次 |
| 最近记录: |