@Uragiremono

Как найти пересечения в списках, основывясь на определённой части строки списка?

Есть такой объект:
some_list = [
    [
        '11;9999;ret',
        '11;8888;qwe',
        '11;4444;qje'
    ],
    [
        '22;1111;hgf',
        '22;9999;kyu',
        '22;7777;cvb',
    ],
    [
        '33;7777;cvb',
        '33;1111;shc',
        '33;9999;ret'
    ]
]

Данные в списках всегда упорядочены, всегда в таком формате %;important;%. Как найти пересечение строк в этих списках,
основываясь только на important, т.е. получить все строки, если important есть во всех списках.

Например из списка some_list должно получится это:
['11;9999;ret', '22;9999;kyu', '33;9999;ret']
Как это реализовать?

Если бы надо было найти пересечение по всей строке, то это легко, вот так:
some_another_list = [
        [
            '9999',
            '45645',
            '2'
        ],
        [
            '345345',
            '9999',
            '2'
        ],
        [
            '111111',
            '8',
            '9999'
        ]
    ]
list(set.intersection(*map(set, some_another_list)))
['9999']

Но мне нужны остальные данные в строках.
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
longclaps
@longclaps
Да то же самое.
some_shit = [['11;9999;ret', '11;8888;qwe', '11;4444;qje'],
             ['22;1111;hgf', '22;9999;kyu', '22;7777;cvb'],
             ['33;7777;cvb', '33;1111;shc', '33;9999;ret']]
other_shit = [{s.split(';')[1]: s for s in row} for row in some_shit]
final_shit = [[d[key] for d in other_shit] 
              for key in set.intersection(*map(set, other_shit))]
print(final_shit)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы