2012-02-28 25 views
1

私はPythonを使用しています3リスト内のタプルを最初のエントリに置き換えます

私は異なるタプルのリストを持っています。すべてのタプルの最初の値は常に同じですが、残りのタプルは変わります。最初の値を含むタプルの後にリストを検索し、リスト内の新しいタプル全体を置換するにはどうすればよいですか? EX :(122, 23, 24, 9)

このタプルがリスト内にある、最初の値は常に同じですが、残りは私がに等しい最初の値を得たリストの内部でタプルを見つけることができますどのように を変える: これが私のタプルです鉱山タプル「122」と、それは私の全体のタプルを聖霊降臨祭置き換える

(125, 34, 35, 21) 

(122, 341, 5, 27) 

(124, 31, 51, 7) 
+0

あなたの質問は不明です。あなたは投稿して、処理したい入力の例と、望ましい出力をどうしたらいいですか? –

+0

私が言ったように、私はいくつかのタプルを含むリストを持っています、私はリストのタプルの1つを新しいものに置き換える必要があります、私が置き換える必要があるタプルは、 (タプルの最初の値はtup [0]です) – user1229391

答えて

0

あなたのリストを仮定するとlであり、あなたのタプルはtであり、あなたは常に交換するだけで1つのタプルを持っている:

l[l.index([_ for _ in l if _[0] == t[0]][0])] = t 

綺麗ではない、と私は認めている。

リストに最初の値が一致するタプルが複数ある場合、最初のタプルのみが置換されます。

0
a = [(125, 34, 35, 21), (122, 341, 5, 27), (124, 31, 51, 7)] 
t = (122, 23, 24, 9) 
for i, v in enumerate(a): 
    if v[0] == t[0]: 
     a[i] = t 
     break 

はしかし、あなたが反復処理されているリストの値の変更についての異なる意味がありますが、あなたは右の後に壊れたので、私は問題がないと思います!中断とは、リスト内の1つの可能なタプルだけを検索することを意味します。リストに何百万ものエントリが含まれている場合、パフォーマンスが向上するように値がリストの早い方にある場合はすべての値をループしません。

編集:

はあなたがindexメソッドを使用して、リストをループして、リスト内の要素を検索することができタプルt

0

を置き換える追加しました。例えばindex方法のために:

mylist = [(125, 34, 35, 21), 
      (122, 341, 5, 27), 
      (124, 31, 51, 7)] 

idx = mylist.index((122, 341, 5, 27)) 
# idx should be '1' 

問題は、全体のタプルが正確に発見された場合、それが唯一のエントリを見つけたこと、です。だから、これはあなたにとって最良の解決策ではないかもしれません。ループ付き

これは次のようになります。

for idx, itm in enumerate(mylist): 
    if itm[0] == 122: 
     mylist[idx] = (1,2,3,4,5) # your new tuple 

私は、リスト内の各要素のインデックスを追加するenumerateを使用しています。

7
l = [(125, 34, 35, 21), (122, 341, 5, 27), (124, 31, 51, 7)] 
t = (122, 23, 24, 9) 

out = [t if e[0] == t[0] else e for e in l] 
print(out) 

これはアウト出力します

[(125, 34, 35, 21), (122, 23, 24, 9), (124, 31, 51, 7)] 
+1

+1かなりきれいに、私はリストの理解に 'else'を忘れました! – Kimvais

+0

+1確かに、素晴らしい解決策! – Emmanuel

関連する問題