如何在Python中使用列表推导将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"
其实,我想知道怎么做到这两种方式。
9 个回答
7
有几种选择。首先,你可以创建一个新的列表,然后把每个列表里的内容都加到这个新列表里:
li2 = []
for sublist in li:
li2.extend(sublist)
另外,你还可以使用 itertools
模块里的 chain
函数,这个函数可以把多个列表里的所有项目合并成一个可遍历的对象:
import itertools
li2 = list(itertools.chain(*li))
如果你采用这种方法,就可以直接生成字符串,而不需要先创建一个中间列表:
s = ",".join(itertools.chain(*li))
8
试试这个:
li=[[0,1,2],[3,4,5],[6,7,8]]
li2 = [ y for x in li for y in x]
你可以这样理解:
给我每一个ys的列表。
这些ys是从xs中来的。
这些xs是从li中来的。
要把这个用字符串表示出来:
','.join(map(str,li2))
35
像这样:
[ 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' 的顺序是对的。虽然循环的“主体”在列表推导的开头,但嵌套循环(还有 'if' 条件)的顺序和你写出完整循环时是一样的:
for innerlist in outerlist:
for item in innerlist:
...