Использование For-Else выполняет оба условия.Как это исправить? - PullRequest
0 голосов
/ 03 февраля 2019

Мне нужно написать код, используя циклы, чтобы выяснить, есть ли какой-либо общий элемент в двух списках.Итак, я написал следующее:

l1 = eval(input("Enter a list: "))
l2 = eval(input("Enter another list: "))
for i in range (len(l1)):
        for j in range (len(l2)):
                if l1[i] == l2[j]:
                        print("Overlapped")
                        break
else:
        print("Separated")

Тем не менее, в результате я получаю следующее:

Enter a list: [1,34,543,5,23,"apple"]
Enter another list: [54,23,6,213,"banana"]
Overlapped
Separated

Поскольку списки имеют общий элемент, он должен печатать только «Перекрытый»", но в итоге выводится" Separated ".

Как это исправить?Я использую Python 3.7

Спасибо большое !!

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Создайте список кортежей (i, j) и используйте один цикл for, чтобы просмотреть список кортежей.Таким образом, либо вывод равен "Overlapped", и цикл прерывается, либо выполняется условие else, а вывод "Separated":

for i, j in [(i, j) for i in range(len(l1)) for j in range(len(l2))]:
    if l1[i] == l2[j]:
        print("Overlapped")
        break
else:
    print("Separated")

Выход:

Enter a list: [1,34,543,5,23,"apple"]
Enter another list: [54,23,6,213,"banana"]
Overlapped

Enter a list: [1,34,543,5,23,"apple"]
Enter another list:  [54,234567,6,213,"banana"]
Separated

В качестве альтернативы вы можете создать список кортежей с индексами элементов равного списка.Наконец, проверьте, если список пуст:

equal = [(i, j) for i in range (len(l1)) for j in range(len(l2)) if l1[i] == l2[j]]
if equal:
     print("Overlapped")
else:
     print("Separated")  
0 голосов
/ 03 февраля 2019

Так как вам нужно вырваться из обоих циклов, чтобы else работал так, как вы ожидаете, я думаю, что будет проще просто вообще не использовать else здесь.Если вы определяете свой код в функции, вы можете использовать return для одновременного выхода из обоих циклов.

Например:

def have_common_elements():
    l1 = eval(input("Enter a list: "))
    l2 = eval(input("Enter another list: "))
    for i in range (len(l1)):
        for j in range (len(l2)):
            if l1[i] == l2[j]:
                return True
    return False # will only happen if the previous `return` was never reached, similar to `else`

have_common_elements()

Пример:

Enter a list: [1,34,543,5,23,"apple"]
Enter another list: [54,23,6,213,"banana"]
True

Enter a list: [1,34,543,5,25,"apple"]
Enter another list: [54,23,6,213,"banana"]
False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...