отфильтровать элементы списка, которые соответствуют другому списку и сохранить первоначальный порядок списка - PullRequest
0 голосов
/ 25 октября 2018

Допустим, у меня есть следующий список

periods = ['2017 Q1', 'TEST2', '2018 Q4','2017 Q2', '2019Q3', '2017 Q3', '2017 Q4', '2017 FY', 'TEST']

Я хочу фильтровать по периодам, чтобы вернуть любые элементы в списке, которые содержат элементы из этого списка

master_list = ['Q1', 'Q2', 'Q3', 'Q4', 'S1', 'S2', 'FY']

Так что я бы ожидал

filtered = ['2017 Q1', '2018 Q4','2017 Q2', '2019 Q3', '2017 Q3', '2017 Q4', '2017 FY']

Когда я делаю что-то подобное

a = [period for period in periods for master in master_list if period in master]

Но это возвращает:

filtered = ['2017 Q1', '2017 Q2', '2019 Q3', '2017 Q3', '2017 Q4' ,'2018 Q4' ,'2017 FY']

Этот был переупорядочен.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Я не уверен, что итоговый список верен, так как ваше условие (точка в мастере) никогда не будет истинным.Почему бы не сделать что-то простое, как:

filtered = []
for period in periods:
  for master in master_list:
    if master in period:
      filtered.append(period)
0 голосов
/ 25 октября 2018

Вам необходимо проверить, если master in period:

master_list = ['Q1', 'Q2', 'Q3', 'Q4', 'S1', 'S2', 'FY']
periods = ['2017 Q1', 'TEST2', '2018 Q4', '2017 Q2', '2019Q3', '2017 Q3', '2017 Q4', '2017 FY', 'TEST']
a = [period for period in periods for master in master_list if master in period]

print(a)

Выход

['2017 Q1', '2018 Q4', '2017 Q2', '2019Q3', '2017 Q3', '2017 Q4', '2017 FY']

Пояснение

Выражение '2017 Q1' in 'Q1' проверяет, является ли '2017 Q1' подстрокой 'Q1', равной False, с другой стороны 'Q1' in '2017 Q1 'является True

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...