Python反向sort()vs sort(),负值

时间:2016-11-01 14:33:25

标签: python python-2.7

我试图根据名称前面的最大数值(降序)对给定输入进行排序。例如:

3                                 <-- Number of test case

shank 3

shashank 3

friend 5

使用c.sort(reverse = True)时的代码:

a = int(raw_input())
c = []
for _ in xrange(a):
    a,b = raw_input().split()
    b = int(b)
    c.append((b,a))
c.sort(reverse = True)
print c

输出:

[(5, 'friend'), (3, 'shashank'), (3, 'shank')]

这绝对没问题。

现在对于不同的方法我尝试使整数(b代码)为负,因此更多的负整数将首先表示它将作为反向运行。在输出中,数字的排列很好,但字符串与先前的输出不匹配。

代码:

a = int(raw_input())
c = []
for _ in xrange(a):
    a,b = raw_input().split()
    b = int(b)
    c.append((-b,a)) 
c.sort()
print c

输出:

[(-5, 'friend'), (-3, 'shank'), (-3, 'shashank')]

与先前的不同之处在于shank先来,然后shashank来了。

那么这背后真的发生了什么?为什么它会提供不同的输出?

1 个答案:

答案 0 :(得分:3)

使用c.append((-b,a)),您倒置了b但不是a,因此当两个项目具有相同的b时,它们会按升序a排序。