2017-10-18 5 views
0

J'ai essayé de trouver la question similaire comme je veux demander dès maintenant. Mais, la réponse ne m'aide pas vraiment. J'essayais d'obtenir de la valeur, mais une seule valeur si la valeur est la même. ici mon code:Python, obtenir la valeur juste si la valeur est la même

d'abord, j'ai condition comme ce

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) 

Je chaîne de condition et entier, la condition dire que entier ont une valeur. J'essayais de créer une condition si la valeur est la même que d'obtenir la valeur juste un.

Je veux que le résultat soit comme ceci:

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) 

la variable ids_data montre l'identifiant juste une valeur différente.

+0

est-commande important? Sinon, convertissez simplement en 'set'. –

Répondre

2

Le plus simple est de maintenir un ensemble des valeurs que vous avez vu:

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) 

En python3, vous pouvez également utiliser ce hack pour obtenir le même en moins de lignes:

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

Merci beaucoup c'est le travail pour moi. Mais, pouvez-vous m'expliquer pourquoi il n'est pas nécessaire de vérifier chaque valeur? Sur ma logique que je dois vérifier chaque valeur pour savoir que la valeur est identique ou non. @schwobaseggl –

+0

@Scarlettstone Vous ** vérifiez ** chaque valeur avec 'x in seen', ou est-ce que je vous ai mal compris? – schwobaseggl

+0

Non, j'essayais de vérifier en utilisant '' 'pour i dans arr_rest_ids pour j dans i''' –