В документах вы найдете:
s.pop([i])
- извлекает элемент в i , а также удаляет его из s
Таким образом, ожидается, что индекс i
будет индексом, а вы дадите ему строку. Вы можете изменить на:
strings.pop(strings.index(i))
Но это похоже на чрезмерное убийство, и ваша попытка сделать вещи более эффективными, удаляя элементы, идет наперекосяк из-за строки:
while i in strings:
Это может быть не явно, но эта строка зацикливает список каждый раз. И даже если вы делаете его короче, это очень много.
Один из способов сделать это, пройдя по списку только 1 раз , использует 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]