2017-01-13 70 views
1

我有一個列表的列表。每個列表應該有6個元素。 有些情況下,我只列出包含(以下列表的檢查最後一個元素)1元的情況:Pythonic添加元素的方法csv.writerows

[['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個元素。

回答

4

試試這個

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

通過@MikeMüller`s答案

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

與列表理解insipred

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

你可以乘以一個空字符串['']名單獲得包含儘可能多的空字符串的列表:

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

乘以零爲您提供了一個空列表:

>>> [''] * 0 
[] 

找出你想要的大小(6)和列表的當前長度len(line)的區別和添加列表與許多''結束每一行:

對於這個數據:

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']] 

可以AP簾布這些:

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個元素。