Я пытаюсь пройтись по списку. Но он получает первый элемент. Он не получает второй элемент. Я не могу понять, что я делаю неправильно.
filte = ['fingerprint','cipher']
dupe = ['cipher','extract']
for val in filte:
print(val)
if val in dupe:
dupe.remove(val)
else:
filte.remove(val)
print("filter",filte)
print("dupe",dupe)
вывод, который я получил:
fingerprint
filter ['cipher']
dupe ['cipher', 'extract']
требуемый вывод:
fingerprint
cipher
filter ['cipher']
dupe [ 'extract']
Точно. Итак, OP, вы хотите либо выполнить итерацию по перевернутому списку (удаление его последнего элемента не изменяет его индексы), либо создать новый список, в который вы добавляете подходящий элемент.
Не могли бы вы объяснить @SmackAlpha, что вы пытаетесь здесь сделать?





просто убери else
filte = ['fingerprint','cipher']
dupe = ['cipher','extract']
for val in filte:
print(val)
if val in dupe:
dupe.remove(val)
filte.remove(val)
print("filter",filte)
print("dupe",dupe)
выход:
fingerprint
cipher
filter ['fingerprint']
dupe ['extract']
Используйте set
Бывший:
filte = ['fingerprint','cipher']
dupe = ['cipher','extract']
print(list(set(filte) - set(dupe))) #OR list(set(filte).difference(set(dupe)))
print(list(set(dupe) - set(filte)))
Выход:
['fingerprint']
['extract']
Примечание: Не рекомендуется удалять элементы при повторении объекта.
Я точно не знаю, как циклы работают в Python, но поскольку вы удаляете элемент во время цикла, это может вызвать проблему повторения. Он ждет второго элемента, но после удаления
cipherстановится первым, поэтому второго нет.