列表理解对我来说就像是一块不透明的花岗岩,正则表达式就是我的。我需要指点。
比方说,我有一个2D列表:
li = [[0,1,2],[3,4,5],[6,7,8]]
我想把它合并成一个长长的列表
li2 = [0,1,2,3,4,5,6,7,8]
或转换为带分隔符的字符串:
s = "0,1,2,3,4,5,6,7,8"
真的,我想知道如何做到这两点。
发布于 2008-09-19 17:28:14
如下所示:
[ item for innerlist in outerlist for item in innerlist ]
将其直接转换为带分隔符的字符串:
','.join(str(item) for innerlist in outerlist for item in innerlist)
是的,'for innerlist in outerlist‘和'for item in innerlist’的顺序是正确的。即使循环的"body“位于listcomp的开头,嵌套循环(和'if‘子句)的顺序仍然与您将循环写出时相同:
for innerlist in outerlist:
for item in innerlist:
...
发布于 2008-09-19 17:26:51
有几个选择。首先,您可以只创建一个新列表,并将每个列表的内容添加到其中:
li2 = []
for sublist in li:
li2.extend(sublist)
或者,您可以使用itertools
模块的chain
函数,该函数生成一个包含多个迭代器中所有项的迭代器:
import itertools
li2 = list(itertools.chain(*li))
如果采用这种方法,则可以在不创建中间列表的情况下生成字符串:
s = ",".join(itertools.chain(*li))
发布于 2008-09-19 17:29:23
试一试:
li=[[0,1,2],[3,4,5],[6,7,8]]
li2 = [ y for x in li for y in x]
你可以这样读它:
给我每一笔钱的清单。
Y来自X。
X来自li。
要在字符串中映射它,请执行以下操作:
','.join(map(str,li2))
https://stackoverflow.com/questions/103844
复制相似问题