两个查找第二个最低分数的python代码
我被告知要解决这个黑客问题: 打印物理成绩第二低的任何学生的姓名;如果有多个学生,按字母顺序排列他们的名字,并将每个名字打印在新行上 问题链接: 现在,除了HackerRank页面上提到的约束之外,还有其他约束:两个查找第二个最低分数的python代码,python,Python,我被告知要解决这个黑客问题: 打印物理成绩第二低的任何学生的姓名;如果有多个学生,按字母顺序排列他们的名字,并将每个名字打印在新行上 问题链接: 现在,除了HackerRank页面上提到的约束之外,还有其他约束: 不使用lambda函数 最少或不使用列表函数(除排序外) 尽量不要创建附加(重复)列表(一个没有原始列表最小值的新列表。因此,此列表的最小值是原始列表的第二个最小值。) 这是我的第一个代码。 尽量使其基本(不使用许多内置函数) 这个代码是完全正确的。对所有测试用例都运行良好 现在,我
我见过许多正确的替代代码(来自Geeksforgeks和StackOverFlow)我不想链接到任何能给我正确答案的新代码。相反,我想知道代码1有什么问题?第一次代码提取中的致命缺陷是设置
min
和smin
的位置:
#选择最小值和第二个最小值构成前两个分数。
如果数据[0][1]>数据[1][1]:
smin=数据[0][1]
分钟=数据[1][1]
其他:
分钟=数据[0][1]
smin=数据[1][1]
如果前两个人的分数相同,会发生什么<代码>分钟和smin
将是相同的
考虑以下输入:
3
foo
10
bar
10
baz
50
当您开始考虑for循环中的baz
时,您将有mins==10
和smin==10
因此,当您试图确定baz
的分数是否应该是第二个最小值时,出现了一个问题:
elif data[i][1]>min和data[i][1]
因为mins
和smin
是相同的,所以不会为smin
设置新值
您的第二个程序通过采用不同的方法来解决此问题。希望这有帮助 如果前两个分数相等且为负怎么办
For example: [['John': -15], ['Nic': -15], ['Mike': 20]]
在这种情况下,您的代码将最小值
和第二个最小值
设置为-15
:
if data[0][1] > data[1][1]:
smin = data[0][1]
mins = data[1][1]
else:
mins = data[0][1]
smin = data[1][1]
然后在代码的这一部分,您的smin
是-15
:
for i in data:
if i[1] == smin:
names.append(i[0])
但是第二个最小值实际上是20
您只需在名称
列表中添加['John','Nic']
if data[0][1] > data[1][1]:
smin = data[0][1]
mins = data[1][1]
else:
mins = data[0][1]
smin = data[1][1]
for i in data:
if i[1] == smin:
names.append(i[0])