将元组列表转换为列表列表

54

我编写了这个函数,用于将元组列表转换为列表列表。是否有更优雅/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个回答

81

26

虽然列表推导式是完全有效的答案,因为您只是在更改类型,但考虑使用内置的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()

在Python2中,没有Lambda表达式的map比列表推导式更快。 :) - Bhargav Rao
2
@BhargavRao 可能只有微不足道的影响 - 除非您已经确定这是代码性能瓶颈,否则可读性应始终是首要考虑因素。 - Gareth Latty
我一直认为map比列表推导更易读。但是,是的,速度差异非常小。 - Bhargav Rao
列表推导式更像日常代码 - 可读性是主观的(那些习惯于函数式语言的人将习惯于 map()),但我会说,map() 的唯一可读情况是在使用现有函数或类型的简单情况下 - 为 map() 定义新函数(包括 lambda)永远不会比列表推导式更易读。(而且,正如您所指出的,性能更低)。 - Gareth Latty
只是一个小注释:你可以使用这段代码 [*map(list, list_of_tuples)] 将 map 转换为 list,而不是 list(map(list, list_of_tuples)),因为第一种方法更快(你可以用 %timeit 来检查)。 - Amin Ba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接