我在这样的列表中有一个元组/列表:
[('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])))
有更好还是更快的方式???
答案 0 :(得分:10)
你可以使用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
答案 1 :(得分:7)
您可以像这样使用reversed
:
tuple(reversed((1, 2)) == (2, 1)
要将其应用于列表,您可以使用map
或列表理解:
map(tuple, map(reversed, tuples)) # map
[tuple(reversed(x)) for x in tuples] # list comprehension
如果您主要对运行时速度感兴趣,我只建议您分析各种方法并选择最快的方法。
答案 2 :(得分:1)
一种奇特的方式:
[t[::-1] for t in mylist]
答案 3 :(得分:0)
使用列表理解,我发现使用单独的变量而不是单个变量的索引(如@iabdalkader提供的解决方案一样)更加优雅和易于理解:
[(b, a) for a, b in mylist]
答案 4 :(得分:0)
就地修改当前列表,最有效的方法是:
my_list[:] = [(y, x) for x, y in my_list]
它分配给列表切片,它覆盖了整个列表,而不会在内存中创建额外的列表副本。另见this answer。