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

Изначально есть список со строками.

Нужно проверить, является ли хоть одна строка подстрокой второй (то есть начинается ли с нее эта строка)

spisok = ['a', 'b', 'cd', 'are']

Программа должна вывести a и are, т.к. a является подстрокой are (are начинается с a)

Вопрос: Как в цикле пройтись по КАЖДОМУ элементу списка? Например текущий со следующим можно сравнить с помощью цикла

for i in range(len(spisok)):
    if spisok[i].startsith(spisok[i+1]):
        ...

Но как сравнить ВСЕ элементы друг с другом?


Ответы (5 шт):

Автор решения: user363756
spisok = ['a', 'b', 'cd', 'are']

for word1 in spisok:
    for word2 in spisok:
        if word1 != word2 and word1.startswith(word2):
            print(word1, word2)
# выведет: are a
→ Ссылка
Автор решения: Danis
for i in range(len(spisok)):
    for j in range(i + 1, len(spisok)):
        if spisok[i] in spisok[j]:
            print(spisok[i])
            print(spisok[j]) 
→ Ссылка
Автор решения: CrazyElf

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

spisok = ['a', 'b', 'cd', 'are']

for i, word1 in enumerate(spisok):
    for word2 in spisok[i + 1:]:
        if word1 in word2 or word2 in word1:
            print(word1, word2)
→ Ссылка
Автор решения: strawdog
import itertools

spisok = ['a', 'b', 'cd', 'are', 'all', 'bb']

b = list(itertools.combinations(spisok, 2))
res = [x for x in b if x[0] in x[1]]

тогда res будет:

[('a', 'are'), ('a', 'all'), ('b', 'bb')]
→ Ссылка
Автор решения: ka RlsoN

Как сравнить ВСЕ элементы друг с другом? Например, есть два списка.

lst_1 = [2,4,8,16,12]
lst_2 = [4,6,12,1,8]

Создаем пустой список. Создаем цикл для первого списка. Добавляем условие: если i есть во втором списке то добавляем его в третий список.

lst_3 = [] 

for i in lst_1:  
    if i in lst_2:  
        lst_3.append(i) 
print(lst_3)

Результат: [4,12,8]

Таким образом, программа сравнит все элементы в двух списках и соберёт из них третий, в котором есть одинаковые для двух списков элементы. point it's a button space ) Точки это отступы. the methods above are more complicated

→ Ссылка