所以我试图在列表中找到第三大数字/字符串。这是我到目前为止的代码
def big(inputString):
big1 = inputString[0]
big2 = inputString[0]
big3 = inputString[0]
for char in inputString:
if char > big1:
big1, big2,big3 = char,big1,big2
elif big1 > char > big2 > big3:
big3 = char
print('largest',big1,'second largest',big2,third largest,big3)
当用户输入字符串列表时,输出应该如下所示:
big('abxztu')
largest z second largest x third largest u
但我得到的输出是
largest z second largest x third largest b
任何人都可以告诉我我的代码中的错误在哪里
答案 0 :(得分:2)
你不是在处理big2>的情况。 char> BIG3。
此外,您只需对字符串进行排序,然后按任意顺序打印字符,而不是这种手动强力方法。
s = sorted('abxztu')
print s # ['a', 'b', 't', 'u', 'x', 'z']
现在从尾部打印它们,或者如果你想要反转并从头部打印它们。
@Chris_Rands建议的更好的答案是使用heapq.nlargest。
print heapq.nlargest(3, 'abxztu') #['z', 'x', 'u']
答案 1 :(得分:1)
你可以这样做:
def big(inputString):
l = sorted(list(inputString)) #Turning the input into a list and sorting it
l = l[::-1] #Reversing the list
print(l[0],l[1],l[2]) #Printing out the first three element of the list
这是测试运行的一个例子:
>>> big("abc")
c b a
编辑1
测试运行的另一个例子:
>>> big("helloworld")
w r o
答案 2 :(得分:1)
您可以使用内置sorted
对列表进行排序。 sorted
接受reverse
参数(布尔值),因此您可以对列表进行降序排序。
您甚至可以将字符串传递给sorted
,它会将单个字符排序到列表中。
要获取列表中的第三个,第二个或第n个最大项目,只需按降序对列表进行排序,然后调用该项目,例如obj[0]
表示最大项目,obj[1]
表示第二大项目
让我们把它放在一起:
""" Returns nth largest object from string or list """
def nth_largest(obj, n=1):
obj = sorted(obj, reverse=True)
return obj[n-1]
>>> nth_largest('abxztu', 3)
'u'
答案 3 :(得分:0)
当char小于big1且大于big2
时,缺少一个条件代码:
def big(inputString):
big1 = inputString[0]
big2 = inputString[0]
big3 = inputString[0]
for char in inputString:
if char > big1:
big1, big2, big3 = char, big1, big2
elif big1 > char > big2 > big3:
big3 = char
elif big3 < char < big1 > big2:
big3 = char
print('largest',big1,'second largest',big2,'third largest',big3)
答案 4 :(得分:0)
对于前三名:
import string
def bigger(s):
l = [(i,string.ascii_letters.index(i)) for i in s]
max1=max(l,key=lambda x: x[1])
l.remove(max1)
max2=max(l,key=lambda x: x[1])
l.remove(max2)
max3=max(l,key=lambda x: x[1])
return '\n'.join([max1[0],max2[0],max3[0]])
print(bigger('zsabx'))
输出:
z
x
s
最大:
import string
def bigger(s):
l = [(i,string.ascii_letters.index(i)) for i in s]
max1=max(l,key=lambda x: x[1])
return max1[0]
print(bigger('zsabx'))
输出:
z