的名單上有元組的列表:如何解壓不定長度
my_lst = [('2.0', '1.01', '0.9'), ('-2.0', '1.12', '0.99')]
我正在尋找一個解決方案,以便它打印出的值的逗號分隔線,以解開每個值:
2.0, 1.01, 0.9, -2.0, 1.12, 0.99
問題是,列表的長度各不相同。
的名單上有元組的列表:如何解壓不定長度
my_lst = [('2.0', '1.01', '0.9'), ('-2.0', '1.12', '0.99')]
我正在尋找一個解決方案,以便它打印出的值的逗號分隔線,以解開每個值:
2.0, 1.01, 0.9, -2.0, 1.12, 0.99
問題是,列表的長度各不相同。
使用join
兩次:
>>> lis=[('2.0', '1.01', '0.9'), ('-2.0', '1.12', '0.99')]
>>> ", ".join(", ".join(x) for x in lis)
'2.0, 1.01, 0.9, -2.0, 1.12, 0.99'
for i in my_lst:
for j in i:
print j, ", "
使用可以使用itertools chain(..)
。
>>> from itertools import chain
>>> my_lst = [('2.0', '1.01', '0.9'), ('-2.0', '1.12', '0.99')]
>>> list(chain(*my_lst))
['2.0', '1.01', '0.9', '-2.0', '1.12', '0.99']
然後加入一個「,」。
>>> ",".join(list(chain(*my_lst)))
'2.0,1.01,0.9,-2.0,1.12,0.99'
還有標準的2-d可迭代的扁平化機制:
>>> ', '.join(x for y in lis for x in y)
'2.0, 1.01, 0.9, -2.0, 1.12, 0.99'
雖然我更喜歡chain.from_iterable
您可以使用itertools.chain
,像這樣:
list(itertools.chain(*lst))
或使用一些功能如:
def chain(*iters):
for it in iters:
for elem in it:
yield elem
我會使用'chain.from_iterable'來代替它,雖然它在這個應用程序中並不重要。 – mgilson 2013-05-03 15:59:02