列表对我的理解似乎就像正则表达式适合我的花岗岩的不透明块.我需要指针.
说,我有一个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"
真的,我想知道如何做到这两点.
像这样:
[ item for innerlist in outerlist for item in innerlist ]
将其直接转换为带分隔符的字符串:
','.join(str(item) for innerlist in outerlist for item in innerlist)
是的,'对于外部列表中的内部列表'和'对于内部列表中的项目'的顺序是正确的.即使循环的"主体"位于listcomp的开头,嵌套循环(和'if'子句)的顺序仍然与编写循环时的顺序相同:
for innerlist in outerlist: for item in innerlist: ...
有几个选择.首先,您可以创建一个新列表并将每个列表的内容添加到其中:
li2 = [] for sublist in li: li2.extend(sublist)
或者,您可以使用itertools
模块的chain
函数,该函数生成包含多个迭代中的所有项的iterable:
import itertools li2 = list(itertools.chain(*li))
如果采用此方法,则可以生成字符串而无需创建中间列表:
s = ",".join(itertools.chain(*li))
试试看:
li=[[0,1,2],[3,4,5],[6,7,8]] li2 = [ y for x in li for y in x]
你可以这样读:
给我每个y的列表.
ys来自xs.
xs来自li.
要在字符串中映射:
','.join(map(str,li2))