我理解名单似乎像花岗岩不透明块正则表达式是对我来说。 我需要指针。
我说,我有一个二维表:
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"
说真的,我想知道如何做到这两点。
我理解名单似乎像花岗岩不透明块正则表达式是对我来说。 我需要指针。
我说,我有一个二维表:
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)
是的,顺序“在outerlist innerlist”和“在innerlist项目”是正确的。 虽然循环的“身体”是在listcomp,嵌套循环的顺序开始(和“如果”条款)仍然是一样的,当你编写循环了:
for innerlist in outerlist:
for item in innerlist:
...
尝试:
li=[[0,1,2],[3,4,5],[6,7,8]]
li2 = [ y for x in li for y in x]
你可以这样阅读:
给我的每伊苏名单。
伊苏来自XS。
该XS来自里。
要映射在一个字符串:
','.join(map(str,li2))
有一对夫妇的选择。 首先,你可以创建一个新的列表,并添加每个列表它的内容:
li2 = []
for sublist in li:
li2.extend(sublist)
或者,您可以使用itertools
模块的chain
功能,产生包含多个iterables所有项目的迭代:
import itertools
li2 = list(itertools.chain(*li))
如果采取这种方法,你就可以生产的字符串而无需创建一个中间表:
s = ",".join(itertools.chain(*li))
我最喜欢的,和最短的一个,是这样的:
li2 = sum(li, [])
和
s = ','.join(li2)
编辑:使用sum
,而不是reduce
,(感谢托马斯武泰 !)
为了使扁平列表兼用:
然后, join
使它成为一个字符串。
对于第二个,有一个内置的字符串的方法来做到这一点:
>>> print ','.join(str(x) for x in li2)
"0,1,2,3,4,5,6,7,8"
对于第一个,你可以使用一个理解列表中加入:
>>> print ",".join([",".join(str(x) for x in li])
"0,1,2,3,4,5,6,7,8"
但它更容易使用itertools.flatten:
>>> import itertools
>>> print itertools.flatten(li)
[0,1,2,3,4,5,6,7,8]
>>> print ",".join(str(x) for x in itertools.flatten(li))
"0,1,2,3,4,5,6,7,8"
NB:itertools是一个模块,可以帮助您处理与迭代器,如列表,元组或字符串共同的任务......它,因为它不保存你的工作结构的副本,但由一个处理的项目一个很方便。
编辑:有趣,我学到很多的方式来做到这一点。 谁说,只有做到这一点的一个好方法是?
有很多方法可以做到这一点的问题。 我喜欢NumPy的的工具,因为它通常已经在我所做的一切进口。 但是,如果你不使用numpy的为别的这可能不是一个好方法。
import numpy
li = [[0,1,2],[3,4,5],[6,7,8]]
li2=li[0] #first element of array to merge
i=1
while i<len(li):
li2=numpy.concatenate((li2,li[i]))
i+=1
print li2
这将打印[0 1 2 3 4 5 6 7 8],然后你可以转换成你的字符串这一点。
import itertools
itertools.flatten( li )