2017-04-03 3 views
0

Ich habe zwei Liste F und N, und ich brauche while Loop-Funktion zu verwenden, zu zählen, wie oft jedes Element F innerhalb N auftritt. hier ist meine Listen:while-Schleife zu zählen treten Zeiten

F = [4,7,2] 
N = [2,5,4,2,5,9,3,2,3,7,3,4] 

Ich hoffe, dass das Ergebnis wie folgt zu erhalten:

4 occurs in N 2 times 
7 occurs in N 1 times 
2 occurs in N 3 times 

hier ist mein Code:

index = 0 
while index < len(N): 
    value = N[index] 
    print (value) 
    index = index +1 
else: 
    print(index, "occurs in N", value, "times") 
print() 

irgendwelche Vorschläge?

+0

Sie müssen eine if-Anweisung verwenden, um zu sehen, wann N (index) == Element von F ist, und zählen, wie oft die if-Anweisung True ist. – plasmon360

Antwort

0
f = [4, 7, 2] 
n = [2, 5, 4, 2, 5, 9, 3, 7, 3, 4] 

index1 = 0 

while index1 < len(f): 
    value = f[index1] 
    count = 0 
    index2 = 0 
    while index2 < len(n): 
     if n[index2] == value: 
      count += 1 
     index2 += 1 
    print(value, "occurs in N", count, "times") 
    index1 += 1 

Dies ist eine Lösung mit nur while-Schleifen, ich würde einen Counter wie in der obigen Antwort verwenden. Warum brauchst du eine While-Schleife?

+0

Warum eine zweite while-Schleife verwenden und nicht nur 'n.count (value)'? – Prof

+0

Wie ich ihre Frage verstehe, ist sie nur erlaubt, While-Schleifen zu verwenden, n.count (Wert) wäre in der Tat besser. @Prof –

3

Sie können simpy einen Counter verwenden und dann Verwendung Lookups verwenden:

from collections import Counter 

ncount = Counter(N) 

for f in F: 
    print(f,"occurs in N",ncount[f],"times")

Diese Zeitkomplexität führen O (| F | + | N |) (gegeben Wörterbuch Lookups passiert in O (1), was fast immer der Fall ist).

Sie können die for Schleife in eine while-Schleife drehen wie folgt:

i = 0 while i < len(F): f = F[i] 
    print(f,"occurs in N",ncount[f],"times") 
    i += 1

Aber es ist besser, eine for Schleife zu verwenden, da mit einer for Schleife Progression etc. gewährleistet ist (zum Beispiel nicht wahr muss darüber nachdenken, inkrementieren i).

Sie Counter zu verwenden Gegeben sind nicht erlaubt man sich das Zählen tun kann, zum Beispiel durch Begreifen Liste:

i = 0 
while i < len(F): 
    f = F[i] 
    print(f,"occurs in N",len([1 for x in N if x == f]),"times")

oder durch sum mit:

i = 0 
while i < len(F): 
    f = F[i] 
    print(f,"occurs in N",sum(x == f for x in N),"times")

Oder Sie können Verwenden Sie die .count() Funktion einer Liste:

i = 0 
while i < len(F): 
    f = F[i] 
    print(f,"occurs in N",N.count(f),"times")
+0

Danke @ WIllem Van Onsem, aber wir müssen While-Schleife anstelle von For-Schleife verwenden. Ich bin fest, wie man while-Schleife verwendet, um den Code zu schreiben ... – Sophie

+0

@Sophie: dürfen Sie einen 'Counter' verwenden? –

+0

wir dürfen Counter nicht benutzen, deshalb bin ich in dieser Frage so verwirrt – Sophie

Verwandte Themen