2017-10-21 73 views

Répondre

2

Utilisez la compréhension de la liste et vérifier si l'élément existe

c = len([i for i in list2 if i in list1 ]) 

Mieux vaut de @ Jon-à-dire

c = sum(el in list1 for el in list2) 

Sortie: 4

+2

Pourquoi construire une liste ici ... alors que la vérification n'est pas efficace à cause des listes, vous pouvez aussi écrire cela comme 'sum (el dans list1 pour el dans list2)' –

2

Vous pouvez itérer first liste et addoccurrences d'un nombre donné à un sum en utilisant la méthode count.

for number in list1: 
    s += list2.count(number); 
0

Vous pouvez utiliser sum(...) pour y parvenir avec l'expression du générateur comme:

>>> list1 = [ 3, 4, 7 ] 
>>> list2 = [ 5, 2, 3, 5, 3, 4, 4, 9 ] 

#   v returns `True`/`False` and Python considers Boolean value as `0`/`1` 
>>> sum(x in list1 for x in list2) 
4 

Comme alternative, vous pouvez également utiliser la fonction magique de __contains__ de Python pour vérifier si l'élément existe dans la liste et utilisez filter(..) pour filtrer les éléments de la liste ne répondant pas à la condition "in". Par exemple:

>>> len(list(filter(list1.__contains__, list2))) 
4 

# Here "filter(list(list1.__contains__, list2))" will return the 
# list as: [3, 3, 4, 4] 

Pour plus de détails sur __contains__, lisez: What does __contains__ do, what can call __contains__ function?.

+0

Nevermind que l'utilisation de méthodes dunder n'est pas une bonne pratique - ce sera seulement travailler sur Python 2 –

1

Vous pouvez utiliser collections.Counter ici, donc une mise en œuvre naïve et plutôt laide (mine).

list1 = [ 3, 4, 7 ] 
list2 = [ 5, 2, 3, 5, 3, 4, 4, 9 ] 
from collections import Counter 
total = 0 
c = Counter(list2) 
for i in list1: 
    if c[i]: 
    total += c[i] 

Cela ne prend pas en compte ce qui se passe si vous avez des doublons dans la première liste (HT Jon), et une version beaucoup plus élégante de ce serait:

counter = Counter(list2) 
occurrences = sum(counter[v] for v in set(list1))