Сравнение элементов в списках внутри одного и того же индекса Python - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу сравнить два списка и извлечь содержимое

colours = ["yellow", "light pink", "red", "dark blue", "red"]

items = ["the sun is yellow but the sunset is red ",
         "the pink cup is pretty under the light", 
         "it seems like the flower is red", 
         "skies are blue",
         "i like red"]

Ожидаемый результат:

["yellow", "pink light", "red", "blue", "red"]

Если в списке цветов есть два слова, элемент будет поврежденв двух словах.Как видите, порядок слов в цветах («розовый», «светлый») не важен, так как два слова разбиваются на отдельные слова, а затем сравниваются по отдельности в предложениях.Обратите внимание, что в первом элементе в элементах, хотя в списке цветов есть «красный», я не хочу его извлекать, поскольку «красный» находится в индексе, отличном от индекса элемента.

для 4-го индекса, который "темно-синий" и "небо синие", результат должен отображаться только "синий", потому что в элементах нет темного.

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

colours=["yellow","light pink","red"," dark blue","red"]

items=["the sun is yellow but the sunset is red ","the pink cup is pretty under the light", "it seems like the flower is red", "skies are blue","i like red"]

for i in colours:

y=i.split() #split 2 words to 1 word
    for j in y:
    #iterate word by word in colours that have more than 1 word
        for z in items: 
            s=z.split() #split sentences into tokens/words
            for l in s:
            #compare each word in items with each word in colours
                if j == l:
                    print j

Результат:

yellow
light
pink
red
red
red
blue
red
red
red

Правильный результат:

yellow
pink light 
red
blue
red

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Вы можете использовать следующее понимание списка:

print([' '.join(w for w in i.split() if w in c.split()) for c, i in zip(colours, items)])

Это выводит:

['yellow', 'pink light', 'red', 'blue', 'red']
0 голосов
/ 13 сентября 2018

Использование наборов для проверки членства должно быть намного быстрее, с оговоркой:

>>> [' '.join(set(colour.split()) & set(item.split())) 
     for colour, item in zip(colours, items)]
['yellow', 'pink light', 'red', 'blue', 'red']

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

0 голосов
/ 13 сентября 2018

С zip вы можете сделать намного проще:

colours=["yellow","light pink","red"," dark blue","red"]

items=["the sun is yellow but the sunset is red ","the pink cup is pretty under the light", "it seems like the flower is red", "skies are blue","i like red"]

lst = []
for x, y in zip(colours, items):
    word = ''
    for c in y.split():
        if c in x:
            word = word + ' ' + c
    lst.append(word.strip())

print(lst)
# ['yellow', 'pink light', 'red', 'blue', 'red']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...