2010-12-12 57 views
1

,如果我有一個列表我是,如果有各地的蟒蛇在列表排序元組,例如什麼簡單的辦法疑惑:排序元組在Python

list01 = ([a,b,c],[b,a,d],[d,e,c],[a,f,d]) 

和我整理的話,我會得到:

([a,b,c],[a,b,d],[c,d,e],[a,d,f])? 

甚至:

([a,b,c],[a,b,d],[a,d,f],[c,d,e]) 

,如果這是更容易

Thanx提前:)

+1

順便說一句。它是一個列表元組,反之亦然。 – 2010-12-12 11:42:19

+0

也就是說:這裏沒有列表中的元組。你有一個元組中的列表。 '[]'環繞一個列表。 '()'包圍一個元組。 – 2010-12-12 17:45:23

回答

6
>>> list01 = (['a','b','c'],['b','a','d'],['d','e','c'],['a','f','d']) 
>>> map(sorted, list01) 
[['a', 'b', 'c'], ['a', 'b', 'd'], ['c', 'd', 'e'], ['a', 'd', 'f']] 
>>> sorted(map(sorted, list01)) 
[['a', 'b', 'c'], ['a', 'b', 'd'], ['a', 'd', 'f'], ['c', 'd', 'e']] 
2

就這麼簡單......

list01 = (['a','b','c'],['b','a','d'],['d','e','c'],['a','f','d']) 

print(sorted(map(sorted,list01))) 
2

您可以使用一個發電機來代替:

>>> list01 = (['a','b','c'],['b','a','d'],['d','e','c'],['a','f','d']) 
>>> tuple((sorted(item) for item in list01)) 
(['a', 'b', 'c'], ['a', 'b', 'd'], ['c', 'd', 'e'], ['a', 'd', 'f']) 

地圖比較快,順便說一句。 ;)

In [48]: timeit tuple(map(sorted, list01)) 
100000 loops, best of 3: 3.71 us per loop 

In [49]: timeit tuple((sorted(item) for item in list01)) 
100000 loops, best of 3: 7.26 us per loop 

編輯:到位排序是更快的速度(感謝卡爾):

In [120]: timeit [item.sort() for item in list01 if False] 
1000000 loops, best of 3: 490 ns per loop 
+0

就地排序不必創建新的元組。在我的測試中甚至更快(儘管它創建了一個新列表,但它沒有填充它):'[item.sort()list01中的項目如果爲False] - 每個循環大約0.45 us。 ;)在我的系統中,'map'版本稍微慢一些,'sorted'版本的速度要快得多,因此只有大約40%的速度差異,而不是95%左右的報告。 – 2010-12-12 17:51:15

+0

而且,當然,使用醜陋的'if 0'而不是'if False'會削弱一點點,因爲不需要查看'False'這個名字。所以是的,這就是你在Python中進行微型優化的方式(但是如果它很重要,爲什麼不去C呢?)。 – 2010-12-12 17:59:15

+0

我只是試圖展示一些例子,它仍然依賴於數據。如果它們中的很少一部分比我使用最短/漂亮/最具可讀性的,如果它們中的很多,我可能會使用Cython;) – 2010-12-17 20:48:30