def third_largest(a):
count = 0
b = 0
while count < 2 or count > 2:
for i in range(0,len(a)-1):
if a[b] < a[i]:
count += 1
b += 1
print(a[b])
我希望获得列表中的第三大数字。
首先,我选取第一个元素并与所有其他元素进行比较,然后在count
等于2
时选取第二个元素,然后打印出我的答案。
但为什么我在'list index is out of range'
循环中收到错误消息for
?我真的很困惑。
答案 0 :(得分:2)
在print
循环中添加for
:
def third_largest(a):
count = 0
b = 0
while count < 2 or count > 2:
for i in range(0,len(a)-1):
print("b: {0}, count: {1}, i: {2}".format(b, count, i))
if a[b] < a[i]:
count += 1
else:
count += 0
b += 1
print(a[b])
我们可以确切地看到问题所在:
>>> third_largest([1, 2, 3])
b: 0, count: 0, i: 0
b: 0, count: 0, i: 1
b: 1, count: 1, i: 0
b: 1, count: 1, i: 1
b: 2, count: 1, i: 0
b: 2, count: 1, i: 1
b: 3, count: 1, i: 0
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
third_largest([1, 2, 3])
File "<pyshell#10>", line 8, in third_largest
if a[b] < a[i]:
IndexError: list index out of range
您没有进行任何检查以确保b
是a
范围内的索引。
此外,您可以使用while count != 2:
并注意count += 0
完全没有意义。还有一种更简单的方法可以解决这个问题( 提示 :如果a
按顺序排列,第三大值会在哪里?< / em>的)
答案 1 :(得分:2)
def third_largest(a):
if len(a) < 3:
raise ValueError
# Sort array, smalles ahead, and return item on index -3
return sorted(a)[-3]
使用pythons自己的方法,现在你确定你有正确的号码
答案 2 :(得分:0)
复杂比复杂更好。
def third_largest(a):
if len(a)>2: return list(set(sorted(a)))[-3]
return -1