【问题标题】:Convert a list of tuples to a list of lists将元组列表转换为列表列表
【发布时间】:2013-02-12 11:47:02
【问题描述】:

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

【问题讨论】:

    标签: python


    【解决方案1】:

    你可以使用list comprehension:

    >>> 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]]
    

    【讨论】:

      【解决方案2】:

      虽然列表理解是一个完全有效的答案,但由于您只是在更改类型,因此可能值得考虑替代方案,the map() built-in

      >>> 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() 在 2.x 中提供了一个懒惰的map()

      【讨论】:

      • 同样在 Py2 map w/o Lambdas 比 list-comps 更快。 :)
      • @BhargavRao 数量可能可以忽略不计 - 除非您已将其确定为代码中的性能瓶颈,否则可读性应始终是优先事项。
      • 我一直认为map 比 list-comp 更具可读性。但是是的,速度差异很小。
      • 列表推导读起来更像是日常代码——可读性是主观的(那些习惯于函数式语言的人将被用于map()),但我想说 map 唯一可读的情况是简单的情况您正在使用现有的函数或类型 - 为 map() 定义新函数(包括 lambdas)永远不会比列表理解更具可读性。 (而且,正如您所说,性能较差)。
      • 只是一个小评论:您可以使用这段代码 [*map(list, list_of_tuples)] 而不是 list(map(list, list_of_tuples)) 将地图转换为列表,因为第一种方法更快(您可以检查它%timeit
      猜你喜欢
      • 2018-12-19
      • 2012-06-05
      • 2022-09-27
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 2018-07-20
      相关资源
      最近更新 更多