我正在编写一个函数,该函数将接收两个字符串列表作为参数。
我需要检查第二个列表中的每个字符串在第一个列表中出现的次数,并返回计数数组。我想到了从第一个数组中弹出找到的元素,以便在以后的搜索中,我只需要旅行较少的元素。但是我在strings.pop(i)
上收到此错误。
def matchingStrings(strings, queries):
a=[0 for i in range(len(queries))]
j=0
for i in queries :
while i in strings :
a[j]=a[j]+1
strings.pop(i)
j=j+1
return a
答案 0 :(得分:0)
您会在docs中发现:
中删除
s.pop([i])
-在 i 处检索项目,并将其从 s
因此,i
应该是索引,并且您要给它一个字符串。您可能会更改为:
strings.pop(strings.index(i))
但这似乎是一个过大的杀伤力,而且您尝试通过删除元素来使事情更高效的想法也因行而来:
while i in strings:
它可能不是明确的,但是此行每次都会循环列表。而且,即使您将其缩短,它也很多。
一种只在列表上进行一次 的方法是使用Counter
:
from collections import Counter
strings = ["apple", "orange", "banana", "apple", "banana"]
queries = ["apple", "orange", "potato"]
c = Counter(strings)
res = [c[q] for q in queries]
print(res)
礼物:
[2, 1, 0]