Преобразовать список кортежей в список списков
Я написал эту функцию, чтобы преобразовать список кортежей в список списков. Есть ли более элегантный / Pythonic способ сделать это?
def get_list_of_lists(list_of_tuples):
list_of_lists = []
for tuple in list_of_tuples:
list_of_lists.append(list(tuple))
return list_of_lists
2 ответа
Вы можете использовать понимание списка:
>>> list_of_tuples = [(1, 2), (4, 5)]
>>> list_of_lists = [list(elem) for elem in list_of_tuples]
>>> list_of_lists
[[1, 2], [4, 5]]
Хотя понимание списка является полностью верным ответом, поскольку вы просто меняете тип, возможно, стоит рассмотреть альтернативу, map()
встроенный:
>>> list_of_tuples = [(1, 2), (4, 5)]
>>> map(list, list_of_tuples)
[[1, 2], [4, 5]]
map()
встроенный просто применяет вызываемый элемент к каждому элементу данного итерируемого. Это хорошо для этой конкретной задачи. В общем, списочные представления более читабельны и эффективны (как делать что-либо сложное с map()
тебе нужно lambda
), но где вы хотите просто изменить тип, map()
может быть очень ясным и быстрым.
Обратите внимание, что я использую 2.x здесь, поэтому мы получаем список. В 3.x вы получите итеративный (что ленивый), если вы хотите список в 3.x, просто сделайте list(map(...))
, Если вы хорошо с итерацией для ваших целей, itertools.imap()
обеспечивает ленивый map()
в 2.х.