Ошибка типа: 'in <string>' требует строку как левый операнд, а не список Ошибка - PullRequest
0 голосов
/ 31 марта 2020

Код

text = ["300000", "300001", "500000", "500001"]
cnt = 0
for line in f:
    if text in line:
        print(line.strip())
        cnt += 1
if cnt:
    print(cnt, "count")
else:
    print(text, "No data.")

Ошибка:

Traceback (most recent call last):
  File "C:/Users/users/PycharmProjects/Mining/Test Folder/Test2.py", line 10, in <module>
    if text in line:
TypeError: 'in <string>' requires string as left operand, not list

Почему возникает эта ошибка?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Ключевое слово in используется для проверки, находится ли определенное значение в коллекции.

Если вы хотите узнать, находится ли line в списке text, переключите ваши операнды:

text = ["300000", "300001", "500000", "500001"]
cnt = 0
for line in f:
    if line in text: 
        print(line.strip())

Если вы хотите узнать, есть ли какая-либо из строк в списке text находится внутри / подстрока line:

text = ["300000", "300001", "500000", "500001"]
cnt = 0
for line in f:
    if any([i in line for i in text]): 
        print(line.strip())
0 голосов
/ 31 марта 2020

Вам нужно понять, как «в» работает в python.
Пример:
> "abc" in ["pqr", "xyz", "abc"]
True
Здесь я проверяю, существует ли строка «ab c» в списке, указанном справа от «in», то есть [»pqr "," xyz "," ab c "]

Но вы проверяете наличие списка (text в вашем коде) внутри другого списка (line в вашем коде). Следовательно, поскольку в сообщении об ошибке указано «требуется строка в качестве левого операнда», но вы предоставили список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...