Два for в одну строчку

res = []
for k in str:
    for j in str1:
        if k == j:
            res.append(k)

Возможно ли записать это в одну строчку?


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

Автор решения: CrazyElf

str - плохое название для переменной, оно перекрывает встроенный класс питона. Поэтому у меня будут str1 и str2.

Второй цикл for вообще не нужен, его можно заменить оператором in. Вариант со списковым включением:

res = [k for k in str1 if k in str2]

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

res = set(str1) & set(str2)

Ну и на закуску "функциональный" вариант с filter (аналог первого варианта по сути):

res = list(filter(str2.__contains__, str1))
→ Ссылка