2010-12-12 59 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