[英]Swap values in a tuple/list inside a list in python?
我有一个像这样的元组列表:
[('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])))
有没有更好或更快的方法???
你可以使用地图:
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。 地图
您可以像这样使用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
如果您主要对运行速度感兴趣,我只能建议您分析各种方法并选择最快的方法。
使用列表推导式我发现使用单独的变量而不是单个变量的索引更优雅和易于理解,如@iabdalkader 提供的解决方案:
[(b, a) for a, b in mylist]
一种奇特的方式:
[t[::-1] for t in mylist]
要就地修改当前列表,最有效的方法是:
my_list[:] = [(y, x) for x, y in my_list]
它分配给列表 slice ,它覆盖整个列表,而不会在内存中创建列表的额外副本。 另请参阅此答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.