Я новичок в изучении Python и у меня есть два списка

list1 = ['product','document','light','time','run']
list2 = ['survival','shop','document','run']

И я хочу найти подходящие слова, а не соответствующие слова

Здесь это пример результата

matching_words = ['document','run']
notmatching_words = ['product','light','time','survival','shop']

Как я могу сделать

-2
Jeon Jungkook 22 Апр 2020 в 07:13

2 ответа

Лучший ответ

Пытаться:

matching_words = []
notmatching_words = list(list2) # copying the list2
for i in list1:
    if i in list2:
        matching_words.append(i) # appending the match
        notmatching_words.remove(i) # removing the match
    else:
        notmatching_words.append(i) # appending the un-matched

Это дает:

>>> matching_words
['document', 'run']
>>> notmatching_words
['survival', 'shop', 'product', 'light', 'time']
0
Joshua Varghese 22 Апр 2020 в 04:17

Решение с ответом работает отлично, но я хотел бы предложить другое, использующее структуру данных set, так как это наиболее адаптированное решение для такого рода проблем:

list1 = ['product','document','light','time','run']
list2 = ['survival','shop','document','run']

set1 = set(list1)
set2 = set(list2)

matching_words = set1.intersection(set2)
# {'document', 'run'}
nonmatching_words = set1.symmetric_difference(set2)
# {'time', 'light', 'shop', 'survival', 'product'}

Обратите внимание, что порядок элементов является случайным.

Однако, если порядок не важен, вы можете захотеть работать с наборами от конца до конца:

# DECLARING A SET
set1 = {'product','document','light','time','run'}
set2 = {'survival','shop','document','run'}
# Notice the use of {} instead of []

# FOR LOOP
for word in matching_words:
    print(word)

# document
# run

Если вам абсолютно необходим список, вы можете преобразовать результаты обратно (порядок все еще непредсказуем):

matching_words = list(matching_words)
nonmatching_words = list(nonmatching_words)
0
Tawy 22 Апр 2020 в 11:18