Я не особо уверен в правильности вашей архитектуры, но допускаю, что двум людям может принадлежать один номер. Тогда можно реализовать следующий алгоритм. Соберем каждое значение и разобьем по :
, а затем сверим ключи имён и ключи телефонов (name_key
и phone_key
соответственно)
def get_matching_phones(name_list, phone_list):
output_list = []
for name_entry in name_list:
name_parts = name_entry.split(':')
name_key = name_parts[1] + ':' + name_parts[2]
for phone_entry in phone_list:
phone_parts = phone_entry.split(':')
phone_key = phone_parts[1] + ':' + phone_parts[2]
if name_key == phone_key:
output_list.append(f"{name_parts[0]}:{phone_parts[0]}")
break
return output_list
Я немного изменил входные данные, чтобы обогатить тест.
name = ['Alex:Praga:BMW', 'Kolya:Berlin:Audi', 'Greg:Paris:Ford', 'John:Paris:Ford', 'Acinit:Samara:Lada', 'Acinit:Berlin:Audi']
phone = ['74957758888:Berlin:Audi', '74999224831:Paris:Ford','79053455232:Samara:Lada', '74952122159:Praga:BMW','74999212345:Berlin:Audi']
result = get_matching_phones(name, phone)
print(result)
Вывод в терминале:
['Alex:74952122159', 'Kolya:74957758888', 'Greg:74999224831', 'John:74999224831', 'Acinit:79053455232', 'Acinit:74957758888']
p.s. здесь мы можем видеть проблему того, что у Acinit
ожидаются по ключу Berlin:Audi
номер 74999212345
, но вместо этого он берет самый первый в списке подходящий аргумент, а именно номер Kolya
- 74957758888
.
Если данное считается ошибкой, сообщите об этом в комментариях