2013-05-10 21 views
2

什麼是基於例如查找某個特定元組的最有效方式?在一個列表,元組的第二個元素和元組移動到列表頂部 東西的形式爲:在元組列表中查找和移動元組

LL=[('a','a'),('a','b'),('a','c'),('a','d')] 
LL.insert(0,LL.pop(LL.index(...))) 

,我想在指數)的東西(這將讓我的元組的位置'c'作爲第二個元素。

有沒有一個經典的python單線方法來做到這一點?

回答

1
>>> LL.insert(0,LL.pop([x for x, y in enumerate(LL) if y[1] == 'c'][0])) 
>>> LL 
[('a', 'c'), ('a', 'a'), ('a', 'b'), ('a', 'd')] 
>>> 
+0

大。如果y [1] =='c'] [0] 加上[0]在末尾 [x對於x,y在枚舉(LL)中,並且它完美地工作。 謝謝DhruvPathak – chrise 2013-05-10 09:15:47

2

要查找的位置,您可以:

positions = [i for i, tup in enumerate(LL) if tup[1] == 'c'] 

現在,您可以採取所需元素的索引,彈出它推到列表

pos = positions[0] 
LL.insert(0, LL.pop(pos)) 

的開始,但你也可以排序使用元組爲重點的項目列表:

sorted(LL, key=lambda tup: tup[1] == 'c', reverse=True) 

,如果你不關心其他電子商務秩序lements

0

2線,但是1號線的解決方案都是低效

>>> LL=[('a','a'),('a','b'),('a','c'),('a','d')] 
>>> i = next((i for i, (x, y) in enumerate(LL) if y == 'c'), 0) # 0 default index 
>>> LL[0], LL[i] = LL[i], LL[0] 
>>> LL 
[('a', 'c'), ('a', 'b'), ('a', 'a'), ('a', 'd')] 

這什麼都不做,如果索引中沒有找到

>>> LL=[('a','a'),('a','b'),('a','c'),('a','d')] 
>>> i = next((i for i, (x, y) in enumerate(LL) if y == 'e'), 0) # 0 default index 
>>> LL[0], LL[i] = LL[i], LL[0] 
>>> LL 
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('a', 'd')]