У меня есть два разных списка с двумя вариантами элементов: «ПОЛОЖИТЕЛЬНЫЙ» и «ОТРИЦАТЕЛЬНЫЙ». Я составил список, чтобы найти несоответствия, но я не могу вернуть индексы с помощью index (), возможно, я использую функцию не в том месте. Я пытаюсь достичь этого, сохраняя понимание списка.
Код
l1 = ['POSITIVE', 'NEGATIVE', 'POSITIVE', 'NEGATIVE', 'POSITIVE', 'NEGATIVE',
'POSITIVE',
'POSITIVE', # mismatch
'POSITIVE',
'POSITIVE'] # mismatch
l2 = ['POSITIVE', 'NEGATIVE', 'POSITIVE', 'NEGATIVE', 'POSITIVE', 'NEGATIVE',
'POSITIVE',
'NEGATIVE', # mismatch
'POSITIVE',
'NEGATIVE'] # mismatch
mismatch = [i for i, j in zip(l1, l2) if i != j]
print(mismatch)
['POSITIVE', 'POSITIVE']
# expected output
[7, 9]
2 ответа
i
и j
перебирают элементы списков, а не индексы. Если вы хотите получить индекс, используйте функцию enumerate
в python:
mismatch = [i for i, (a, b) in enumerate(zip(l1, l2)) if a != b]
Вот еще один способ использования range
вместо enumerate
и zip
:
mismatch = [i for i in range(len(l1)) if l1[i] != l2[i]]
Ключ в том, чтобы использовать enumerate()
, когда вы хотите перебирать значения и индексы одновременно. Вам действительно не нужен zip()
для этого:
mismatch = [i for i,v in enumerate(l1) if v != l2[i]]
Хотя zip()
было бы полезно в случаях, когда списки имеют разную длину. Кроме того, условие фильтрации можно описать более четко, как показано в ответе @ JayMody.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.