Python 如何查找列表中的最大数字
所以我试图找到列表中第三大的数字/字符串。这是我目前掌握的代码Python 如何查找列表中的最大数字,python,list,Python,List,所以我试图找到列表中第三大的数字/字符串。这是我目前掌握的代码 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
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)
当用户输入字符串列表时,out out应该如下所示:
big('abxztu')
largest z second largest x third largest u
但我得到的结果是
largest z second largest x third largest b
有人能告诉我代码中的错误在哪里吗您没有处理big2>char>big3的情况 此外,您可以对字符串进行排序,然后按任意顺序打印字符,而不是使用手动暴力方法
s = sorted('abxztu')
print s # ['a', 'b', 't', 'u', 'x', 'z']
现在,从尾部打印,或者如果您想要反转s,从头部打印
@Chris_Rands建议的更好的答案是使用heapq.nlargest
print heapq.nlargest(3, 'abxztu') #['z', 'x', 'u']
您没有处理big2>char>big3的情况 此外,您可以对字符串进行排序,然后按任意顺序打印字符,而不是使用手动暴力方法
s = sorted('abxztu')
print s # ['a', 'b', 't', 'u', 'x', 'z']
现在,从尾部打印,或者如果您想要反转s,从头部打印
@Chris_Rands建议的更好的答案是使用heapq.nlargest
print heapq.nlargest(3, 'abxztu') #['z', 'x', 'u']
您可以简单地执行以下操作:
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
>>> big("helloworld")
w r o
编辑1 测试运行的另一个示例:
>>> big("abc")
c b a
>>> big("helloworld")
w r o
您可以简单地执行以下操作:
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
>>> big("helloworld")
w r o
编辑1 测试运行的另一个示例:
>>> big("abc")
c b a
>>> big("helloworld")
w r o
您可以使用内置的
sorted
对列表进行排序sorted
接受一个reverse
参数(布尔值),因此您可以按降序对列表进行排序
您甚至可以将字符串传递给排序后的,它会将单个字符排序到一个列表中
要获取列表中第三个、第二个或第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'
您可以使用内置的
sorted
对列表进行排序sorted
接受一个reverse
参数(布尔值),因此您可以按降序对列表进行排序
您甚至可以将字符串传递给排序后的,它会将单个字符排序到一个列表中
要获取列表中第三个、第二个或第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'
当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)
def big(输入字符串):
big1=输入字符串[0]
big2=输入字符串[0]
big3=输入字符串[0]
对于inputString中的字符:
如果char>big1:
big1,big2,big3=char,big1,big2
elif big1>char>big2>big3:
big3=char
elif big3big2:
big3=char
打印('最大'、大1、'第二大'、大2、'第三大'、大3)
当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)
def big(输入字符串):
big1=输入字符串[0]
big2=输入字符串[0]
big3=输入字符串[0]
对于inputString中的字符:
如果char>big1:
big1,big2,big3=char,big1,big2
elif big1>char>big2>big3:
big3=char
elif big3big2:
big3=char
打印('最大'、大1、'第二大'、大2、'第三大'、大3)
前三名:
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
z
对于最大的:
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
x
s
z
前三名:
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
z
对于最大的:
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
x
s
z
如果big2>char>big3呢?如何定义最大的数字?您的代码似乎无法解释具有多个数字的数字为什么不使用
排序
并根据它取最大值,第三大、第二大、最大=排序('abxztu')[-4:-1]
如果big2>char>big3怎么办?如何定义最大数字?您的代码似乎无法解释多个数字的数字。为什么不使用排序的并根据它取最大值,第三大、第二大、最大=排序的('abxztu')[-4:-1]
heapq.nlargest
比排序的更好this@Chris_Rands我同意。此解决方案应该是一个答案而不是注释:)建议您将其添加到您的答案中:)heapq.nlargest
比sorted for更好this@Chris_Rands我同意。这个解决方案应该是一个答案,而不是一个评论:)我建议你将它添加到你的答案中:)@TobySpeight My bad,我认为这在上下文中是不言自明的,但正如你所说的,最好为未来的搜索者提供周围的上下文。更新了我的答案。这只给了我们最大的数字。这个问题是关于第三大数字的。@RakshaSaini我相信你弄错了,如果你再看一遍答案,你会发现它提供了一个查找第n大数字的通用解决方案,甚至在实际操作中显示它返回第三大数字。@TobySpeight我的错,我认为这在上下文中是不言自明的,但正如你所说的,最好为未来的搜索者提供周围的上下文。更新了我的答案。这只给了我们最大的数字。这个问题是关于第三大数字的。@RakshaSaini我相信你弄错了,如果你再看一遍答案,你会发现它提供了一个通用的解决方案来查找第n大数字,甚至在实际操作中显示它返回第三大数字。你的测试用例实际上没有显示太多,使用一个至少有4个项目的测试可能更好,而且不需要排序就可以反转,请尝试OPs输入:'abxztu'
Thx对于注释Nick,我现在通过添加一个使用更复杂字符串的示例来编辑我的答案您的测试用例实际上没有显示太多,可能最好使用至少有4个项目的测试,并且不需要排序就可以反转,请尝试OPs输入:'abxztu'
Thx对于注释Nick,我现在已通过addi编辑了我的答案