我有一份清单清单。每个列表应该有6个元素。 在某些情况下,我的列表只包含1个元素(检查以下列表的最后一个元素):
[['lemonade', '/g/11bz0dg4b_', '46.6522598267', 'Lemonade', 'Beyonc\xc3\xa9', 'en'],
['blank space', '/m/012d3qyr', '153.392837524', 'Blank Space', '', 'en'],
['radiolab', '/g/11b80zm_6d', '11.685131073', 'Radiolab', '', 'en'],
['migos t shirt']]
因此我可以轻松地做到这一点然后追加:
l = ['migos t shirt']
l += ['','','','','']
ll.append(l)
有更好/更优雅的方法吗? 最终目标是将我的列表列表与 csv.writerows 一起使用,并希望我的文件在这种情况下具有一致数量的逗号6个元素。
答案 0 :(得分:5)
您可以将列表与空字符串['']
相乘以获得包含空字符串的列表:
>>> [''] * 3
['', '', '']
乘以零会得到一个空列表:
>>> [''] * 0
[]
使用6
找出所需大小(len(line)
)与列表当前长度的差异,并在每行末尾添加一个包含''
的列表:< / p>
对于这些数据:
data = [['lemonade', '/g/11bz0dg4b_', '46.6522598267', 'Lemonade', 'Beyonc\xc3\xa9', 'en'],
['blank space', '/m/012d3qyr', '153.392837524', 'Blank Space', '', 'en'],
['radiolab', '/g/11b80zm_6d', '11.685131073', 'Radiolab', '', 'en'],
['migos t shirt']]
你可以申请:
size = 6
for line in data:
line += [''] * (size - len(line))
得到这个结果:
[['lemonade', '/g/11bz0dg4b_', '46.6522598267', 'Lemonade', 'Beyoncé', 'en'],
['blank space', '/m/012d3qyr', '153.392837524', 'Blank Space', '', 'en'],
['radiolab', '/g/11b80zm_6d', '11.685131073', 'Radiolab', '', 'en'],
['migos t shirt', '', '', '', '', '']]
与创建全新列表的列表推导相比,此方法修改了列表。这对大型列表非常有用。此外,如果所有行都已经是6个元素长,则原始列表将不会有任何更改。即使原始列表已经处于完美状态,列表理解也会创建新列表。即在所有子列表中有6个元素。
答案 1 :(得分:4)
试试这个
ll = list(map(lambda x: x if len(x)==6 else x + ['']*(6-len(x)), ll))
由@MikeMüller回答
ll = list(map(lambda x: x + ['']*(6-len(x)), ll))
列表理解
ll2 = [x + ['']*(6-len(x)) for x in ll]