2013-03-07 2 views
11

私はタプルのリストを持っている場合、私はどのように私はタプルを解凍し、1つのリストに、どのように1つのリストにタプルのリストを参加させる?

b = [1,3,5,4] 

を再フォーマットすることができ例えば

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

、私の前の質問How to group list items into tuple?

に続いてこれがまたiter機能と関係していると思うが、私は本当にこれを行う方法を知らない。私を教えてください。

+0

、かなり正確な複製... – danodonovan

答えて

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

これはそのトリックを行います。

+2

そうそう、それは簡単だった、私は... – LWZ

+0

ニース1をどのように考えていました。私はそれについて何度も考えなければならなかった - _最後にサブがどこから来たのか?_ – bjd2385

+0

これはどうしてですか? – ruief

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

ただ、リストAを反復し、タプルを解凍:

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

+1

@Volatility:レイジー評価? – NPE

+0

Hmm、true true – Volatility

1

別の方法:

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

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

print b 

これは、リスト内のタプルを処理します(a)のカントー。緩い変数でも解析したい場合は、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