2017-04-03 100 views
0

我有兩個列表FN,我需要使用while循環函數來計算的F每個元素多久之內出現N。這裏是我的清單:while循環計數發生次

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

我希望得到的結果是這樣的:

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

這裏是我的代碼:

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

有什麼建議?

+0

您需要使用if語句來查看F的N(index)==元素,並計算if語句爲True的次數。 – plasmon360

回答

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 

這是一個只有while循環的解決方案,我會在上面的答案中使用Counter。爲什麼你需要使用while循環?

+0

爲什麼使用第二個while循環而不僅僅是'n.count(value)'? – Prof

+0

據我瞭解她的問題,她只允許使用while循環,n.count(值)會更好。 @Prof –

3

可以的simpy使用Counter然後用使用查找:

from collections import Counter 

ncount = Counter(N) 

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

這將導致時間複雜度O(| F | + | N |)(給定字典查找發生在O( 1),這幾乎總是如此)。

您可以打開for環路成while循環,如下所示:

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

但最好使用for環,因爲有for循環發展等方面得到保證(比如你不必須考慮增加i)。

給你不允許使用列表中理解使用Counter,你可以做計數自己,比如:

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

或使用sum

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

或者你也可以使用.count()函數列表:

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

Thanks @ WIllem Van Onsem,但我們需要使用while循環而不是for循環。我被困在如何使用while循環來編寫代碼... – Sophie

+0

@Sophie:你可以使用'Counter'嗎? –

+0

我們不允許使用Counter,這就是爲什麼我對這個問題感到困惑 – Sophie