向列表元素添加空格

时间:2015-12-04 23:41:19

标签: python list python-3.x

我一直在苦苦挣扎。我有一个包含子列表的列表,我想在子列表的每个元素之前添加一个空格元素。例如:

lin = [[2], [3], [2], [2, 2], [2]]

结果应该是:

lin = [[' ',2], [' ',3], [' ',2], [' ',2, ' ',2], [' ',2]]

我试过这样做:

for a in lin:
    for e in a:
        e = (' ') , e 

但是我获得了完全相同的列表而没有任何改动

3 个答案:

答案 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):这是通过这种方式完成的,原因有两个:

  1. 你不想实际循环a,因为你将要改变a
  2. 中的值
  3. 你需要从最高的索引开始,因为如果你从0开始,那么前面其余项目的索引就会改变。

答案 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]]