【问题标题】:Why does this happen with Python's list.sort?为什么 Python 的 list.sort 会发生这种情况?
【发布时间】:2009-12-29 15:45:18
【问题描述】:

给定代码:

a=['a','b','c','d']
b=a[::-1]
print b
c=zip(a,b)
print c
c.sort(key=lambda x:x[1])#
print c

打印出来:

['d', 'c', 'b', 'a']
[('a', 'd'), ('b', 'c'), ('c', 'b'), ('d', 'a')]
[('d', 'a'), ('c', 'b'), ('b', 'c'), ('a', 'd')]

为什么 [('a', 'd'), ('b', 'c'), ('c', 'b'), ('d', 'a')] 变成 [( 'd', 'a'), ('c', 'b'), ('b', 'c'), ('a', 'd')]?


同样,给定:

c.sort(key=lambda x:3)#
print c

打印出来:

[('a', 'd'), ('b', 'c'), ('c', 'b'), ('d', 'a')]

没有任何变化 - 为什么?

【问题讨论】:

  • 很难说出您使用的 Python 的哪些方面遇到了问题。列表?拉姆达斯?例如,您了解“lambda x:3”的含义吗?还是 x[1]?

标签: python


【解决方案1】:

因为 x[1] 表示

使用

c.sort(key=lambda x:x[0])

【讨论】:

    【解决方案2】:

    您已经使用第二项作为键对c 进行了排序,并且第二项确实上升了,就像您要求它上升一样。有什么好惊讶的?!

    【讨论】:

      【解决方案3】:
      from operator import itemgetter    
      c.sort(key=itemgetter(0))
      

      【讨论】:

        【解决方案4】:

        正如其他人所说,[1] 指的是第二个元素,所以第一部分中的元素是这样排序的。

        至于第二部分,list.sort()stable,因此计算为相同键的元素将保持它们在序列中的相对位置。这就是为什么使用.sort(reverse=True) 可以得到与.sort() 后跟.reverse() 不同的结果。

        【讨论】:

          【解决方案5】:

          您已经使用每个元组的第二个元素作为键对列表进行了排序,因此您可以得到按第二个元素排序的元组(注意“a”、“b”、“c”、“d”按升序排列)。有什么问题?

          【讨论】:

            猜你喜欢
            • 2021-01-24
            • 1970-01-01
            • 2013-11-06
            • 2021-04-30
            • 2010-09-22
            • 1970-01-01
            • 2018-04-27
            • 2013-08-02
            • 2018-12-19
            相关资源
            最近更新 更多