51

我编写了这个函数来将元组列表转换为列表列表。有没有更优雅/ 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
4

2 回答 2

76

您可以使用列表理解

>>> 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]]
于 2013-02-12T11:48:25.277 回答
24

虽然列表理解是一个完全有效的答案,因为您只是在更改类型,但可能值得考虑替代方案,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(...)). 如果您对使用的可迭代对象感到满意,请在 2.x 中itertools.imap()提供惰性对象。map()

于 2013-02-12T11:50:30.037 回答