好的,所以我有一个列表列表
list = [['a','b','c'], ['1','2','3'], ['x','y','z']]
我想编辑每个列表的第一项,使其前面有一个符号。一个 ”?” 在这个例子中。我想我可以使用列表理解来做到这一点。与此类似的东西:
list = ['?'+x for x in i[0] for i in list]
但这只是给我一个错误。这个列表理解的东西让我很困惑,我该怎么做?
好的,所以我有一个列表列表
list = [['a','b','c'], ['1','2','3'], ['x','y','z']]
我想编辑每个列表的第一项,使其前面有一个符号。一个 ”?” 在这个例子中。我想我可以使用列表理解来做到这一点。与此类似的东西:
list = ['?'+x for x in i[0] for i in list]
但这只是给我一个错误。这个列表理解的东西让我很困惑,我该怎么做?
做
l = [['?' + i[0]] + i[1:] for i in l] (l is the list you pass in)
首先,不要命名变量list
;您现在正在掩盖内置list()
类型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']]
>>> [['?' + 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']]
这应该有效:
>>> 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']]
>>>