Как сравнить все элементы списка друг с другом?
Изначально есть список со строками.
Нужно проверить, является ли хоть одна строка подстрокой второй (то есть начинается ли с нее эта строка)
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 шт):
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
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])
Приведу и я свой вариант, поскольку я не уверен, что "подстрока" - это именно "начинается с", это может быть и "входит". Ну и, кроме того, я не люблю использование 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)
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')]
Как сравнить ВСЕ элементы друг с другом? Например, есть два списка.
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