使用列表推导,将递增整数插入包含字符串的列表中

时间:2018-10-02 00:34:06

标签: string python-3.x list insert list-comprehension

如何将这个for循环转换为列表理解?

在:

docs = [['a'], ['b']]
i=0
for each in docs:
    print(each.insert(0, str(i)))
    i+=1
print(docs)

退出:

[['0', 'a'], ['1', 'b']]

1 个答案:

答案 0 :(得分:1)

这取决于您要新列表还是对旧列表进行突变:

  • [l.insert(0,str(i))表示枚举(docs)中的i,l]
  • [l.insert(0,str(i))或l代表枚举(docs)中的i,l]
  • [[str(i)] + docs [i] for i in range(len(docs))]

这将使旧列表发生变异,但仅是副作用,“返回”列表是错误的:

>>> x = [['a'],['b']]
>>> [ l.insert(0,str(i)) for i,l in enumerate(x)]
[None, None]
>>> x
[['0', 'a'], ['1', 'b']]

此问题可以解决:

>>> x = [['a'],['b']]
>>> [ l.insert(0,str(i)) or l for i,l in enumerate(x)]
[['0', 'a'], ['1', 'b']]
>>> x
[['0', 'a'], ['1', 'b']]
>>>

或者一个人可以生成一个新列表而不改变旧列表:

>>> y = [['a'],['b']]
>>> [ [str(i)]+y[i] for i in range(len(y))]
[['0', 'a'], ['1', 'b']]
>>> y
[['a'], ['b']]