У меня есть некоторые списки, описывающие некоторый атрибут числа «n» человека (скажем, человек-1, человек-2, ..... человек-n), например списки следующего типа (в соответствии с атрибутом):
name_list= ["alex", "sam", "name-n"]
roll_list= ["1", "2", "roll-n"]
email_list= ["[email protected]", "[email protected]", "email-n"]
Теперь мне нужно создать еще n списков в соответствии с человеком следующим образом:
person-1 = ["alex", "1", "[email protected]"]
person-2 = ["sam", "2", "[email protected]"]
person-n = ["name-n", "roll-n", "email-n"]
Как я могу закодировать это в python
?
Попробуй это :
person_dict = {f'person-{n+1}' : [name, roll, email] for n, (name, roll, email) in enumerate(zip(name_list, roll_list, email_list))}
Выход :
person_dict
будет:
{
'person-1': ['alex', '1', '[email protected]'],
'person-2': ['sam', '2', '[email protected]'],
'person-3': ['name-n', 'roll-n', 'email-n']
}
Таким образом, у вас не будет n
количества различных переменных, назначенных их соответствующему списку, но у вас будет один словарь, и вы сможете искать ключи в этом словаре с помощью person_dict.get(key)
.
вы можете использовать 2d-массив:
people = [[name_list[i], roll_list[i], email_list[i]] for i in range(len(name_list))]
Использование zip
:
>>> people = [*zip(name_list, roll_list, email_list)]
>>> people
[('alex', '1', '[email protected]'),
('sam', '2', '[email protected]'),
('name-n', 'roll-n', 'email-n')]
Если можно без дефиса, есть такой способ:
class Dict(object):
pass
for n, (name, roll, email) in enumerate(zip(name_list, roll_list, email_list)):
setattr(Dict, 'person' + str(n), [name, roll, email])
Dict.person1 # ['alex', '1', '[email protected]']
name_list= ["алекс", "сэм", "имя-н"]
roll_list= ["1", "2", "ролл-н"]
email_list= ["[email protected]", "[email protected]", "email-n"]
для индекса в диапазоне (len (name_list)):
exec("person_%s = [name_list[index], roll_list[index], email_list[index]]" %(index+1))
распечатать(лицо_1)
распечатать(лицо_2)
распечатать(лицо_3)
Выход:
['алекс', '1', 'алекс@gmail.com']
['Сэм', '2', 'Сэм@gmail.com']
['имя-n', 'roll-n', 'электронная почта-n']
да, извините за ошибку. отредактировано