2017-10-18 12 views
0

私は今質問したいのと同じような質問を見つけようとしていました。しかし、答えは本当に私を助けませんでした。私は価値を得ようと努力していましたが、値が同じであればただ一つの価値です。ここに私のコード:値が同じ場合、Pythonは値を1にします

最初、私は、条件文字列と整数を持っているこの

ids_data = [] 
arr_rest_ids = [('8380128579', 309), ('8380128579', 311), ('8380128579', 310), ('8380222579', 313)] 

if arr_rest_ids: 
    for i in arr_rest_ids: 
     ids_data.append(i) 

のような条件は、条件はその整数値を持って伝えています。私は値が単なる値を得るのと同じ場合に条件を作成しようとしていました。

私は結果は次のようになりたい:

ids_data = [309, 313] 
arr_rest_ids = [('8380128579', 309), ('8380128579', 311), ('8380128579', 310), ('8380222579', 313)] 

if arr_rest_ids: 
    for i in arr_rest_ids: 
     ids_data.append(i) 

ids_data変数は、IDだけで別の値を示しています。

+0

の順です重要?そうでない場合は、単に 'set'に変換してください。 –

答えて

2

最も単純には、あなたが見てきた値のセットを維持することです:のpython3で

arr_rest_ids = [('8380128579', 309), ('8380128579', 311), ('8380128579', 310), ('8380222579', 313)] 
ids_data = [] 
seen = set() 

# no check needed here. If arr_rest_ids is empty, the loop won't start 
for x, y in arr_rest_ids: 
    if x not in seen: 
     ids_data.append(y) 
     seen.add(x) 

を、あなたはまた、より少ない行で同じことを達成するために、このハックを使用することができます。

seen = set() 
ids_data = [seen.add(x) or y for x, y in arr_rest_ids if x not in seen] 
+0

ありがとう、それは私の仕事です。しかし、すべての単一の価値をチェックする必要がない理由を私に説明できますか?私の論理上、値が同じかどうかを知るためには、すべての単一の値をチェックする必要があります。 @schwobaseggl –

+0

@Scarlettstoneあなたは** **すべての単一の値を 'x in seen 'でチェックしますか、または私はあなたを誤解していますか? – schwobaseggl

+0

いいえ、私は、 '' 'for i in arr_rest_ids in i'''を使ってチェックしようとしていました –

関連する問題