Python中的列表内的元组/列表交换价值?(Swap values in a tuple/list

2019-08-02 18:10发布

我有一个这样的名单里面一个元组/列表:

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

什么是蟒蛇最快的方式(一个非常低的CPU /内存的机器上运行)交换这样的价值...

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

curently使用:

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

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

Answer 1:

您可以使用地图:

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

或列表理解:

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

列表内涵是首选,也应该远远快于需要时拉姆达地图,但是请注意,列表中理解有严格的评价,那就是它会如果你担心内存消耗使用尽快它被绑定变量进行评估, 发生器来代替:

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

还有一些细节在这里: Python列表理解比。 地图



Answer 2:

您可以使用reversed这样的:

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

将它应用到一个列表,你可以使用map或列表理解:

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

如果你有兴趣主要是在运行速度,我只能建议您配置文件中的各种方法和选择最快的。



Answer 3:

一个奇特的方式:

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


Answer 4:

使用列表理解我找到更优雅和理解使用单独的变量,而不是指数的单一变量作为由@iabdalkader提供的解决方案:

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


文章来源: Swap values in a tuple/list inside a list in python?