如何在Python中使用列表推导将2D数组合并为一个字符串?

23 投票
9 回答
47054 浏览
提问于 2025-04-11 09:17

对我来说,列表推导就像是对我来说正则表达式那样难以理解。我需要一些指引。

假设我有一个二维列表:

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:
        ...

撰写回答