#python #list-comprehension
Вопрос:
Я пытаюсь поместить вложенное условие во вложенный оператор понимания списка на python, но я не уверен, чего мне не хватает, чтобы это стало возможным, обычный цикл и условие выглядели бы так
newarr = []
for i in array1:
for x in array2:
if x.find(i) !=-1:
if i not in newarr:
newarr.append(i)
и к чему я пришел благодаря пониманию списка, так это к следующему
newarr = [[i for x in array2 if x.find(i) != -1] for i in array1]
Ответ №1:
Вы можете поместить несколько for
предложений в понимание списка, и они будут оцениваться в порядке слева направо, как если бы они были вложены, до того, как будет оценено фактическое значение или проверены условия.
newarr = list(set(i for i in array1 for x in array2 if x.find(i) != -1))
Использование set()
в качестве альтернативы if i not in newarr
проверке, которую невозможно представить в понимании списка, поскольку список newarr
еще не полностью сформирован. Вместо этого в выводе будут отсутствовать дубликаты (последнее вхождение будет иметь приоритет для целей упорядочения).
Если вы хотите сохранить первое вхождение, а не последнее, попробуйте сделать list(reversed(set(i for i in reversed(array1) ...)))
это вместо этого.