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

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

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)。通常的方法是什么?我应该在列表中存储元组或列表吗?

关于"我应该在列表中存储元组或列表吗?"经验法则是使事物尽可能不可变。如果您不需要在适当的位置修改子列表,那么就让它们成为元组。

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

或: </P >

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

知道怎么把它从大到小分类吗?

@Billwild:帮助(已排序)。反转=真。

@Stephen使用itemgetter更快更简单:key=itemgetter(1),在文件开头:from operator import itemgetter。

工作得很好,但是有人能对这里的语法做点评论吗?

sorted_by_second=sorted(data,key=lambda tup:tup[1])[::-1]还执行从大到小的排序工作。

@pacodelumberg:这应该通过参数reverse=True来完成。

第一个坏了

@在第二个例子中,sort是python的List对象的一个方法,它接收一个lambda函数作为其key参数。你可以把它命名为tup,或者t,或者随便你喜欢什么,它仍然有效。tup这里指定了列表元组的索引,所以1意味着排序将由原始列表(2, 5, 8中的第二个元组值执行。

我有点怀疑"使用itemgetter更快更简单"这一未经证实的说法。虽然我主观上认为直观的lambda方法比非直观的itemgetter类更简单,但itemgetter确实看起来更快。我很好奇为什么会这样。我粗略的怀疑是,一个lambda会产生将所有局部变量捕获到一个封闭上下文中的隐藏成本,而一个itemgetter实例则不会。医生:总是使用itemgetter,因为速度会赢。

x=[[[5,3]、1.0345]、[[5,6]、5.098]、[[5,4]、4.89]、[[5,1]、5.97]]这样的列表,我们如何对x[0][1]中的元素进行排序?

出于好奇,哪一个更快,第一个还是第二个选项(两者都有itemgetter)?还是复制到位与新变量的方法相同?

我在这里使用的lambda和itemgetter之间做了一个更彻底的基准测试。itemgetter总是比lambda快。

from operator import itemgetter

data.sort(key=itemgetter(1))

这应该是公认的答案。另请参见charlie发布的计时,显示itemgetter类的排序平均比等效lambda函数快126%。

x=[[[5,3]、1.0345]、[[5,6]、5.098]、[[5,4]、4.89]、[[5,1]、5.97]]这样的列表,我们能用itemgetter()对x[0][1]中的元素进行排序吗?

x=[[[5,3]、1.0345]、[[5,6]、5.098]、[[5,4]、4.89]、[[5,1]、5.97]]这样的列表,我们如何对x[0][1]中的元素进行排序?

您还可以按层次结构按多个索引排序,例如data.sort(key=itemgetter(3,1))。

这应该是公认的答案。

如果我有元组列表,如何使用itemgetter?我的意思是,内部列表包含元组,如何根据元组中的第二个元素进行排序?

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

reverse = True

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

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

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

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

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

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

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

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

decorated = [(tup[1], tup) for tup in data]

decorated.sort()

undecorated = [tup for second, tup in decorated]

或者,更简单: </P >

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

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

所以这个答案对python2.3-很有用?在更为流行的Python版本中,是否有一些有效的用法,您可以对此进行详细说明?如果不是的话,没什么麻烦……只是路过,看到这个,老诺金就开始搅动一下。不管怎样,干杯和感谢这次回到早期的Python。

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

data = [

('betty', 1),

('bought', 1),

('a', 1),

('bit', 1),

('of', 1),

('butter', 2),

('but', 1),

('the', 1),

('was', 1),

('bitter', 1)]

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

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

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

[('butter', 2),

('a', 1),

('betty', 1),

('bit', 1),

('bitter', 1),

('bought', 1),

('but', 1),

('of', 1),

('the', 1),

('was', 1)]

没有λ: </P >

def sec_elem(s):

return s[1]

sorted(data, key=sec_elem)

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

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

>>> 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 >

>>> 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 >

tuple(sorted(t))

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值