Преобразовать список кортежей в список списков

Я написал эту функцию, чтобы преобразовать список кортежей в список списков. Есть ли более элегантный / 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.х.

Другие вопросы по тегам