【问题标题】:Swap values in a tuple/list inside a list in python?在python列表中交换元组/列表中的值?
【发布时间】:2012-11-03 07:18:17
【问题描述】:

我有一个这样的元组列表:

[('foo','bar'),('foo1','bar1'),('foofoo','barbar')]

在 python 中(在非常低的 cpu/ram 机器上运行)交换这样的值的最快方法是什么...

[('bar','foo'),('bar1','foo1'),('barbar','foofoo')]

我目前正在使用:

for x in mylist:
    self.my_new_list.append(((x[1]),(x[0])))

有没有更好更快的方法???

【问题讨论】:

    标签: python list tuples swap


    【解决方案1】:

    你可以使用地图:

    map (lambda t: (t[1], t[0]), mylist)
    

    或列表理解:

    [(t[1], t[0]) for t in mylist]
    

    当需要 lambda 时,列表推导式是首选并且据说比 map 快得多,但是请注意,列表推导式有一个严格的评估,也就是说,如果您担心内存,它将在绑定到变量时立即进行评估消费使用 generator 代替:

    g = ((t[1], t[0]) for t in mylist)
    #call when you need a value
    g.next()
    

    这里有更多细节:Python List Comprehension Vs. Map

    【讨论】:

      【解决方案2】:

      你可以像这样使用reversed

      tuple(reversed((1, 2)) == (2, 1)
      

      要将其应用于列表,您可以使用map 或列表/生成器推导:

      map(tuple, map(reversed, tuples))     # map
      [tuple(reversed(x)) for x in tuples]  # list comprehension
      (tuple(reversed(x)) for x in tuples)  # generator comprehension
      

      如果您主要对运行时速度感兴趣,我只能建议您分析各种方法并选择最快的。

      【讨论】:

        【解决方案3】:

        一种奇特的方式:

        [t[::-1] for t in mylist]
        

        【讨论】:

          【解决方案4】:

          使用列表理解我发现使用单独的变量而不是像@iabdalkader 提供的解决方案中的单个变量的索引更优雅和易于理解:

          [(b, a) for a, b in mylist]
          

          【讨论】:

            【解决方案5】:

            要就地修改当前列表,最有效的方法是:

            my_list[:] = [(y, x)  for x, y in my_list]
            

            它分配给列表切片,它覆盖了整个列表,而不会在内存中创建列表的额外副本。另见this answer

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-10-01
              • 2010-12-25
              • 1970-01-01
              • 1970-01-01
              • 2021-09-15
              相关资源
              最近更新 更多