在python中列表中的元组/列表中交换值?

问题描述 投票:9回答:4

我在列表中有一个元组/列表,如下所示:

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

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

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

目前使用:

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

有没有更好或更快的方式?

python list tuples swap
4个回答
12
投票

你可以用map:

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

或列表理解:

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

列表推导是首选的,并且据说比需要lambda时的map要快得多,但是请注意列表推导有一个严格的评估,即它一旦被绑定到变量就会被评估,如果你担心内存消耗使用了发电机代替:

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

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


8
投票

你可以像这样使用reversed

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

要将其应用于列表,您可以使用map或列表理解:

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

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


1
投票

一种奇特的方式:

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

1
投票

使用列表推导我发现使用单独的变量而不是单个变量的索引更加优雅和易懂,如@iabdalkader提供的解决方案:

[(b, a) for a, b in mylist]
© www.soinside.com 2019 - 2024. All rights reserved.