2017-05-16 1 views
0
strings = ("name", "last", "middle") 
file = ["name","blabla","middle"] 
for line in file: 
    if any(s in line for s in strings): 
     print ("found") 

Je veux comparer deux listes et obtenir vérifier les chaînes communes et si et seulement si deux ou plusieurs chaînes sont les mêmes. Le code ci-dessus fonctionne bien pour un mais je veux qu'il vérifie deux mots-clés.Python Comparer deux listes et vérifiez deux chaînes uniques

Par exemple: Il faut que print(found) si et seulement si « nom » et « milieu » se trouve. Non seulement si "nom" est trouvé. Il doit vérifier deux chaînes.

+0

Avez-vous des valeurs de doublons dans votre liste ou tuple? Comment voulez-vous gérer les chaînes avec des cas différents? – styvane

Répondre

0

D'abord, vous pouvez trouver nombre de correspondances en utilisant list comprehension puis len > 2 ou non

>>> num = 2 
>>> l = [i for i in strings if i in file] 
>>> if len(l) >= num: 
     print('found') 
found 
0

Si vous aimez one-liners voici ma proposition:

# If two or more elemnts from listA are present in listB returns TRUE 
def two_or_more(listA, listB): 
    return sum(map(lambda x : x in listB, listA)) > 1 
2

Vous pouvez utiliser set s et intersection si vous voulez vérifier les éléments communs (et ce n'est pas important lesquels).

if len(set(strings).intersection(file)) >= 2: # at least 2 common values 
    print('found') 

Si vous voulez chercher des éléments fixes, vous pouvez utiliser la méthode issubset:

strings = ("name", "last", "middle") 
file = ["name","blabla","middle"] 

check = {'name', 'middle'} # that's a set containing the items to look for. 
if check.issubset(strings) and check.issubset(file): 
    print('found')