添加元素的Pythonic方法csv.writerows文件

2024-09-30 01:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子。每个列表应该有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个元素。你知道吗


Tags: 文件元素列表情况space单子enblank
2条回答

您可以将一个列表与一个空字符串相乘[''],以获得一个包含尽可能多的空字符串的列表:

>>>  [''] * 3
['', '', '']

乘以0得到一个空列表:

>>>  [''] * 0
[]

找出所需大小(6)与当前长度的差异,并在每行末尾添加一个包含尽可能多的''的列表:

对于此数据:

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个元素,则不会对原始列表进行任何更改。列表理解将创建一个新的列表,即使原始列表已经处于完美状态。i、 e.在所有子列表中有6个元素。你知道吗

试试这个

ll = list(map(lambda x: x if len(x)==6 else x + ['']*(6-len(x)), ll))

由@Mike Müller的答案编写的insipred

ll = list(map(lambda x: x + ['']*(6-len(x)), ll))

有列表理解

ll2 = [x + ['']*(6-len(x)) for x in ll]

相关问题 更多 >

    热门问题