2013-02-14 13 views
11

タプルのリストを繰り返し処理するためのきれいな方法を探しています。それぞれのタプルのペアは[(a, b), (c,d) ...]です。その上に、リストのタプルを変更したいと思います。タプルのリストを反復する

標準的なやり方は、リストを繰り返しながらそのリストを変更しないようにすることです。どうすればよいですか?私が欲しいものは次のとおりです。

for i in range(len(tuple_list)): 
    a, b = tuple_list[i] 
    # update b's data 
    # update tuple_list[i] to be (a, newB) 
+0

さて、あなたは本当にあなたが唯一のタプルを更新している、その1でリストを更新していません。 –

+0

そうですね、 'tuple_list [i] =(a、newB)' ...のようなものですが、ループ内でこれを避けたいのですが。私は清潔な方法があれば好奇心が強いです。 – Clev3r

+1

@Clever:あなたが与えたループは問題ありません。更新しているリストを繰り返すのではなく、インデックスだけを繰り返します。リスト内の要素の数を変更していない限り、これはリストを扱う完全に標準的な方法です。 –

答えて

29

リスト内のタプルを置換するだけです。それをループしながら限り、あなたは要素の追加や削除を避けるよう、リストを変更することができます

for i, (a, b) in enumerate(tuple_list): 
    new_b = some_process(b) 
    tuple_list[i] = (a, new_b) 

か、私が上記したようリストを使用して、関数にbへの変更をまとめることができるかどうか読解:ここ

tuple_list = [(a, some_process(b)) for (a, b) in tuple_list] 
4

なぜそれを変更するのではなく、リストの理解のために行くのですか?

new_list = [(a,new_b) for a,b in tuple_list] 
0

はいくつかのアイデアです:

def f1(element): 
    return element 

def f2(a_tuple): 
    return tuple(a_tuple[0],a_tuple[1]) 

newlist= [] 
for i in existing_list_of_tuples : 
    newlist.append(tuple(f1(i[0]) , f(i1[1])) 

newlist = [ f2(i) for i in existing_list_of_tuples ] 
+1

なぜ '(...)'だけの場合に 'tuple(...)'を使うのですか? –

+0

もっと読みやすくするためです。そこには括弧の穴がたくさんあった。 –

+0

私はそれがより読みやすいとは思わない。代わりに注意をそらすと、代わりに別のシーケンス型をタプルにキャストしていると思います。 –

関連する問題