while 循环计算发生次数

while loop to count occur times

我有两个列表FN,我需要使用while循环函数来计算F的每个元素在[=14中出现的频率=].这是我的清单:

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()

有什么建议吗?

您可以简单地使用 Counter 然后使用查找:

<b>from collections import Counter</b>

ncount = Counter(N)

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

这将导致时间复杂度 O(|F|+|N|)(假设字典查找发生在 O(1),几乎总是如此)。

您可以将 for 循环转换为 while 循环,如下所示:

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

但最好使用 for 循环,因为使用 for 循环可以保证进度等(例如,您不必考虑递增 i) .

鉴于不允许您使用 Counter,您可以自己进行计数,例如使用列表理解:

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

或使用 sum:

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

或者你可以使用列表的.count()函数:

i = 0
while i < len(F):
    f = F[i]
    print(f,"occurs in N",<b>N.count(f)</b>,"times")
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 循环的解决方案,我会像上面的答案一样使用计数器。为什么需要使用 while 循环?