关于python:如何对列表/元组进行排序(list/tuple)?

How to sort (list/tuple) of lists/tuples?

我在列表或元组列表中有一些数据,如下所示:

1
2
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]

我想按子集中的第二个元素排序。也就是说,按2,5,8排序,其中2来自(1,2,3)5来自(4,5,6)。通常的方法是什么?我应该在列表中存储元组或列表吗?


1
sorted_by_second = sorted(data, key=lambda tup: tup[1])

或: </P >

1
data.sort(key=lambda tup: tup[1])  # sorts in place


1
2
from operator import itemgetter
data.sort(key=itemgetter(1))


现在我想添加到斯蒂芬的答案,如果你想在阵列的品种从高到低的另一个方式,比其他的,以上只是to add this to the线: </P >

1
reverse = True

和作为结果将是: </P >

1
data.sort(key=lambda tup: tup[1], reverse=True)

在多准则排序村"的村庄,namely为第二和第三个元素的元组,让我们 </P >

1
data = [(1,2,3),(1,2,1),(1,1,4)]

所以我define Aλ,剧情是一describes元组级的。" </P >

1
2
sorted(data, key=lambda tup: (tup[1],tup[2]) )
[(1, 1, 4), (1, 2, 1), (1, 2, 3)]

斯蒂芬的答案是一个"使用。对完全性,这里的"DSU(decorate变undecorate)模式和战略的理解: </P >

1
2
3
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]

或者,更简单: </P >

1
[b for a,b in sorted((tup[1], tup) for tup in data)]

在Python作为noted排序PCMCIA-HOWTO得到最新的资料,这已被终止,因为Python 2.4 unnecessary密钥函数时,became可用。 </P >


为了发展战略品种(A)元组(, )count进入descending命令和wordalphabetical输入命令: </P >

1
2
3
4
5
6
7
8
9
10
11
data = [
('betty', 1),
('bought', 1),
('a', 1),
('bit', 1),
('of', 1),
('butter', 2),
('but', 1),
('the', 1),
('was', 1),
('bitter', 1)]

在使用这个方法: </P >

1
sorted(data, key=lambda tup:(-tup[1], tup[0]))

和信息技术,我的结果: </P >

1
2
3
4
5
6
7
8
9
10
[('butter', 2),
('a', 1),
('betty', 1),
('bit', 1),
('bitter', 1),
('bought', 1),
('but', 1),
('of', 1),
('the', 1),
('was', 1)]


没有λ: </P >

1
2
def sec_elem(s):
    return s[1]
1
sorted(data, key=sec_elem)

"斯蒂芬回答冰的点。这里是以最好的方法visualization; </P >

喊出来的,"一个准备好的球员的球迷!=) </P >

1
2
3
4
>>> gunters = [('2044-04-05', 'parzival'), ('2044-04-07', 'aech'), ('2044-04-06', 'art3mis')]
>>> gunters.sort(key=lambda tup: tup[0])
>>> print gunters
[('2044-04-05', 'parzival'), ('2044-04-06', 'art3mis'), ('2044-04-07', 'aech')]

这是一个功能key将要变换的Collection items方法的比较。compareToJAVA类的方法。 </P >

通过对关键的参数必须是什么这是可赎回的。在这里,使用安lambda创建匿名函数(这是一个可赎回)。 《语法:λλ其次是字村(一个元素名称,然后单块的一部法典。 </P >

下面的实例,我们是排序的列表的信息的元组,阿布特拥有某些事件的时间和人员的名字。 </P >

这是我们村庄的战略排序事件发生的时间-这是一张元素的元组。 </P >

s.sort([cmp[, key[, reverse]]])种笔记《项目部的地方 </P >


itemgetter()冰somewhat阿姨比lambda tup: tup[1]冰,但增长相对温和的(全面10到25个百分点)。 </P >

(ipython会议) </P >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
>>> from operator import itemgetter
>>> from numpy.random import randint
>>> values = randint(0, 9, 30000).reshape((10000,3))
>>> tpls = [tuple(values[i,:]) for i in range(len(values))]

>>> tpls[:5]    # display sample from list
[(1, 0, 0),
 (8, 5, 5),
 (5, 4, 0),
 (5, 7, 7),
 (4, 2, 1)]

>>> sorted(tpls[:5], key=itemgetter(1))    # example sort
[(1, 0, 0),
 (4, 2, 1),
 (5, 4, 0),
 (8, 5, 5),
 (5, 7, 7)]

>>> %timeit sorted(tpls, key=itemgetter(1))
100 loops, best of 3: 4.89 ms per loop

>>> %timeit sorted(tpls, key=lambda tup: tup[1])
100 loops, best of 3: 6.39 ms per loop

>>> %timeit sorted(tpls, key=(itemgetter(1,0)))
100 loops, best of 3: 16.1 ms per loop

>>> %timeit sorted(tpls, key=lambda tup: (tup[1], tup[0]))
100 loops, best of 3: 17.1 ms per loop

排序(A)元组的冰quite简单: </P >

1
tuple(sorted(t))