列表列表的列表理解

时间:2013-08-03 16:55:13

标签: python list-comprehension

好的,所以我有一份清单

list = [['a','b','c'], ['1','2','3'], ['x','y','z']]

我想编辑每个列表的第一项,因此它前面有一个符号。一个 ”?”在这个例子中。我想我可以使用列表理解来做到这一点。类似的东西:

list = ['?'+x for x in i[0] for i in list]

但这只是给了我一个错误。这个列表理解的东西让我困惑,我该怎么做?

4 个答案:

答案 0 :(得分:5)

待办事项

l = [['?' + i[0]] + i[1:] for i in l]    (l is the list you pass in)

答案 1 :(得分:3)

首先,不要命名变量list;您现在正在屏蔽built-in list() type,如果您希望list()仍然是代码中的其他类型,则很容易导致错误。

要将字符串前置到每个嵌套列表的第一个元素,请使用简单的列表解析:

outerlist = [['?' + sub[0]] + sub[1:] for sub in outerlist]

这将从嵌套列表中构建一个新列表,方法是将一个元素列表与第一个更改的元素连接起来,再加上子列表的其余部分。

演示:

>>> outerlist = [['a','b','c'], ['1','2','3'], ['x','y','z']]
>>> [['?' + sub[0]] + sub[1:] for sub in outerlist]
[['?a', 'b', 'c'], ['?1', '2', '3'], ['?x', 'y', 'z']]

答案 2 :(得分:0)

>>> [['?' + el if i==0 else el for i,el in enumerate(subl)] for subl in L]
[['?a', 'b', 'c'], ['?1', '2', '3'], ['?x', 'y', 'z']]

此外,如果您希望修改初始列表,则可以在不创建新列表的情况下对其进行修改:

>>> for sublist in L:
    sublist[0] = '?' + sublist[0]   
>>> L
[['?a', 'b', 'c'], ['?1', '2', '3'], ['?x', 'y', 'z']]

答案 3 :(得分:0)

这应该有效:

>>> l = [['a','b','c'], ['1','2','3'], ['x','y','z']]
>>> [["?"+a,b,c] for [a,b,c] in l]
[['?a', 'b', 'c'], ['?1', '2', '3'], ['?x', 'y', 'z']]
>>>