Печатайте элементы, которые отличаются между двумя строками

#python #list #difference

Вопрос:

Имея, например, эти две строки:

 test1 = "line1 n line2 nline3"
test2 = "line1 n line2 nline2"
 

Как я могу напечатать весь элемент, который отличается от первого, сравнивая его со вторым?

В этом случае я хотел бы печатать только:

 line3
 

Я пытаюсь сделать это с помощью этого кода:

 differences = [item for item in test1 if item not in test2]
print (differences)
 

Но это только показывает:

 ['3']
 

Комментарии:

1. Вы предполагаете, что обе строки имеют одинаковую длину? У вас есть еще примеры?

2. @OneCricketeer Да, обе строки должны иметь одинаковую длину

Ответ №1:

Похоже, вы хотите разделить две строки на пробелы и символы новой строки, а затем сравнить элементы в каждом индексе списков и собрать те, которые отличаются?

Если это так, я предполагаю, что у вас есть такие данные, что вы получаете списки одинакового размера.

Сначала вы разделяете(), затем получаете элементы из обоих списков одновременно с помощью zip и выполняете простое сравнение.

Поскольку вы стремились к пониманию списка, вот все, что я сказал в коде:

 test1 = "line1 n line2 nline3"
test2 = "line1 n line2 nline2"

difference = [item1 for item1, item2 in zip(test1.split(), test2.split()) if item1 != item2]

print(difference)
 

Правка: Кроме того, проблема с вашим кодом, в частности, заключалась в том , что вы переходили от символа к символу в строке test1 и проверяли, не существует ли в ней указанного символа test2 . Ну, персонаж 3 был единственным, кто этого не сделал, так что именно по этой причине вы получили этот вывод.

Ответ №2:

Вы также можете использовать set разницу.

 test1 = "line1 n line2 nline3"
test2 = "line1 n line2 nline2"

print(set(test1.split()).difference(set(test2.split())))