Возвращает совпадающие строки из двух списков на основе последних 4 символов

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

 list1 = ['1_Maths','2_Chemistry','10.1_Geography','12_History']
list2 = ['1_Maths', '2_Physics', '3_Chemistry','11.1_Geography','13_History']
  

Я хочу создать два вывода из list1 и list2 на основе последних 4 символов.

 lists = [item for itm in list1 if itm in list2]
  

Выше только печатается 1_Maths . Не могу придумать способ создания всех совпадающих объектов.

 last_4char = [sub[ : -4] for sub in list1] 
  

Это может быть идеей, но я не уверен, как я могу реализовать это, чтобы получить точные результаты из list1 / 2

Вывод

 print(new_list1)  = ['1_Maths','2_Chemistry','10.1_Geography','12_History']
print(new_list2)  = ['1_Maths', '3_Chemistry','11.1_Geography','13_History']
  

Комментарии:

1. [itm for itm in list1 if itm[-4:] in [item2[-4:] for item2 in list2]] . Обратите внимание, что это решение предполагает, что все элементы в списках имеют не менее 4 символов

Ответ №1:

Попробуйте это:

 def common_4_last(list1, list2):
    return [[i for i in list1 if i[-4:] in {k[-4:] for k in list2}], [i for i in list2 if i[-4:] in {k[-4:] for k in list1}]
  

В результате получится список из 2 элементов, один список для элементов формы list1 и второй список для элементов из list2, которые соответствуют критериям common last 4

Вы можете запустить функцию для любой пары списков

Например, для ваших данных list1 и list2 результат будет:

 common_4_last(list1, list2)

[['1_Maths', '2_Chemistry', '10.1_Geography', '12_History'], ['1_Maths', '3_Chemistry', '11.1_Geography', '13_History']]
  

Если вам нужен первый список, вы можете получить его с помощью

common_4_last(list1, list2)[0] и то же самое для второго списка

Комментарии:

1. Любой лучший способ сделать это, если у вас есть три списка. Все списки имеют одинаковые имена, но номера разные.