Как перебрать два списка со строковыми элементами в python с условием - PullRequest
4 голосов
/ 04 мая 2020

Например, у меня есть два списка, например

a = ["there", "is", "a", "car"]
b = ["i", "feel", "happy", "today"]

Я хочу сравнить a[0] и b[0]1, if there is any common alphabet between 'там' and 'i'` результат должен быть истинным, иначе он должен быть ложным

Вывод:

[False,False,True,True]

Я смог сделать это, если это только один элемент в a и b, но не может перебрать список

a = ["there", "is", "a", "car" , "jill"]
b = ["i", "feel", "happy", "today" ,"jill"]
d = []
i = 0
for  word in range(len(a)):
    for word in range (len(b)):
        c = list(set(a[i]) & set(b[i]))
    if c == []:
            d.append(False)
    else:
            d.append(True)
i = i+1
print (d)

Ответы [ 3 ]

4 голосов
/ 04 мая 2020

Если вы хотите выполнить тестирование парами, это ваш код:

print([bool(set(x) & set(y)) for (x, y) in zip(a, b)])

Ваши списки ввода имеют разную длину, поэтому мне не ясно, что вы хотите делать с "Джилл" "(элемент b не соответствует, если a ).

Немного больше деталей:

  • zip делает список пар из пары списков (фактически это список из n-кортежей из n списков, но в нашем случае n == 2).
  • Как вы поняли, построение набора из строки возвращает набор символов в строке.
  • & в качестве оператора набора устанавливается пересечение
  • , создавая значение bool из набора, возвращающего этот набор не пустота.
  • Простое понимание списка создает результат.
3 голосов
/ 04 мая 2020

Примерно так должно работать:

d = [len(set(i)&set(j)) > 0 for i,j in zip(a,b)]

Тестирование:

>>> a = ["there", "is", "a", "car" , "jill"]
>>> b = ["i", "feel", "happy", "today" ,"jill"]
>>> d = [len(set(i)&set(j)) > 0 for i,j in zip(a,b)]
>>> d
[False, False, True, True, True]
>>> 
1 голос
/ 04 мая 2020

Другие ответы достаточно хороши, вот ваша версия исправлена:

a = ["there", "is", "a", "car" , "jill"]
b = ["i", "feel", "happy", "today" ,"jill"]
d = []
i = 0
for  word in range(len(a)):
    for word in range (len(b)):
        c = list(set(a[i]) & set(b[i]))
    if c == []:
            d.append(False)
    else:
            d.append(True)
    i = i+1  # <------------------------ this was missing an indentation
print (d)
...