2012-11-14 3 views
8

는이 같은 목록 내 튜플/목록이 있습니다파이썬에서리스트 내부의 튜플 /리스트의 값을 교환 하시겠습니까?

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

무엇을 같은 값을 교환하는 파이썬 (매우 낮은 CPU/RAM 시스템에서 실행)에서 가장 빠른 방법입니다 ...

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

curently 사용 :

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

더 나은 또는 더 빠른 방법이 있나요 ???

답변

7

당신은지도를 사용할 수 있습니다

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

또는 목록 이해 :

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

목록 함축이 선호 아마도 훨씬 더 빨리 람다가 필요한지도보다, 그러나 그 목록의 이해에주의하는 엄격한있다 평가, 즉 메모리 소비가 걱정된다면 생성자 대신

을 사용하면 변수에 바인딩되는 즉시 평가됩니다.3210
g = ((t[1], t[0]) for t in mylist) 
#call when you need a value 
g.next() 

좀 더 자세한 내용은 여기 있습니다 Python List Comprehension Vs. Map

+0

문제는 enigma2 GUI 구성 요소에 대한 반전 된 목록이 필요하다는 것입니다. 즉, 전체 목록 (해당 목록의 1000 개 이상의 튜플)이 반전되어야 함을 의미합니다. List comprehension은 올바른 방법입니다. – subixonfire

+0

@ user1824571 가능성 – iabdalkader

5

당신은이 같은 reversed를 사용할 수 있습니다

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

이 목록에 적용하려면 map 또는 지능형리스트를 사용할 수 있습니다

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

주로 런타임 속도에 관심이있는 경우에만 권장 할 수 있습니다. 다양한 접근법을 설명하고 가장 빠른 것을 선택하십시오.