我一直在苦苦挣扎。我有一个包含子列表的列表,我想在子列表的每个元素之前添加一个空格元素。例如:
lin = [[2], [3], [2], [2, 2], [2]]
结果应该是:
lin = [[' ',2], [' ',3], [' ',2], [' ',2, ' ',2], [' ',2]]
我试过这样做:
for a in lin:
for e in a:
e = (' ') , e
但是我获得了完全相同的列表而没有任何改动
答案 0 :(得分:2)
我认为你实际上意味着像Tigerhawk的评论。
您的问题是e= (' ') , e
只是将e
(最初是嵌套列表中的每个值)的值覆盖到包含空格和原始值的元组。这实际上并没有改变列表中的任何内容,只是更改e
最初指向的内容。
你可以这样做:
>>> lin = [[2], [3], [2], [2, 2], [2]]
>>> for a in lin:
for i in range(len(a)-1,-1,-1):
a.insert(i, ' ')
>>> lin
[[' ', 2], [' ', 3], [' ', 2], [' ', 2, ' ', 2], [' ', 2]]
注意内循环:for i in range(len(a)-1,-1,-1):
这是通过这种方式完成的,原因有两个:
a
,因为你将要改变a
答案 1 :(得分:2)
您可以使用列表理解和itertools
chain.from_iterable
>>> from itertools import chain
>>> lin = [[2], [3], [2], [2, 2], [2]]
>>> [list(chain.from_iterable([(' ', i) for i in j])) for j in lin]
[[' ', 2], [' ', 3], [' ', 2], [' ', 2, ' ', 2], [' ', 2]]
>>>
答案 2 :(得分:0)
一个简洁的功能性解决方案,仅使用内置函数
lin = [[2], [3], [2], [2, 2], [2]]
add_spaces = lambda l: [i for x in zip(' '*len(l), l) for i in x]
new_list = [add_spaces(l) for l in lin]
输出:
>>> print new_list
[[' ', 2], [' ', 3], [' ', 2], [' ', 2, ' ', 2], [' ', 2]]