2013-03-07 115 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

相关问题