2013-03-07 148 views

回答

25
b = [i for sub in a for i in sub] 

這將做到這一點。

+2

噢,這很簡單,我在想什麼... – LWZ 2013-03-07 10:55:30

+0

尼斯之一。我必須考慮一下 - _「底端從哪裏來?」_ – bjd2385 2016-11-08 21:05:21

+0

爲什麼/它是如何工作的? – ruief 2017-11-10 23:12:27

2
import itertools 
b = [i for i in itertools.chain(*[(1,3),(5,4)])] 
0

只是遍歷列表和解壓元組:

l = [] 
for x,y in a: 
    l.append(x) 
    l.append(y) 
7
In [11]: list(itertools.chain(*a)) 
Out[11]: [1, 3, 5, 4] 

如果你只需要遍歷1, 3, 5, 4,你可以擺脫list()通話。

+0

'itertools.chain.from_iterable'有什麼意義?那麼如果你可以這麼做呢? – Volatility 2013-03-07 10:57:27

+1

@Volatility:懶惰評價? – NPE 2013-03-07 10:58:46

+0

嗯,足夠真實 – Volatility 2013-03-07 11:07:03

1

另一種方式:

a = [(1,3),(5,4)] 
b = [] 

for i in a: 
    for j in i: 
     b.append(j) 

print b 

這將只處理列表(一)壽裏面的元組。如果你想解析鬆散變量,你需要添加if-else語句,比如;

a = [(1,3),(5,4), 23, [21, 22], {'somevalue'}] 
b = [] 

for i in a: 
    if type(i) == (tuple) or type(i) == (list) or type(i) == (set): 
     for j in i: 
      b.append(j) 
    else: 
     b.append(i) 

print b 
+0

使用'isinstance(i,collections.Iterable)'而不是類型檢查(假設'collections'已經被導入) – Volatility 2013-03-07 11:15:46

相關問題