确定的名单,所以我必须列出列表修真名单
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';您通过这样做掩盖了内置类型。 –
@MartijnPieters,好吧,我听到你。我只是不知道有一个内置的列表。它有什么作用? – Nathan
@Nathan它返回一个列表对象。 – SethMMorton
首先,不要命名变量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']]
等待,这不起作用...这只是给我'外表'没有定义。如果我用列表替换外部列表没有任何变化 – Nathan
@Nathan:我使用了一个不同的名称,不掩盖内置。示例代码不会重新分配结果;使用'outerlist = [...]'来分配它。 –
>>> [['?' + 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']]
>>>
不要将列表命名为list,它会掩盖内置类型。 –