Объект 'str' не может быть интерпретирован как целое число: Python ошибка - PullRequest
1 голос
/ 02 февраля 2020

Я писал функцию, которая получит два списка строк в качестве аргументов. Мне нужно проверить, сколько раз каждая строка во втором списке встречается в первом списке и вернуть массив подсчетов. Я думал о том, чтобы вытолкнуть найденные элементы из первого массива, чтобы при последующих поисках мне нужно было перемещать только меньшие элементы. Но я получаю эту ошибку на 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

1 Ответ

0 голосов
/ 02 февраля 2020

В документах вы найдете:

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]
...