python降序输出列表前三_Python降序列表

问题是您只进行一次检查,并始终立即返回True或False。

相反,在检查完整个列表之前,不应该返回“True”:

def des(l):

for i in range(len(l)):

if (l[i]

return [False,i]

return True这会给你另一个问题,但是:

>>> des([4,3,2,1])

Traceback (most recent call last):

File "", line 1, in

File "", line 3, in des

IndexError: list index out of range这是因为当您到达range中的最后一个值时,您会查看超出列表末尾的值。解决这个问题的最简单方法是从您的范围中减去一个:

def des(l):

for i in range(len(l) - 1):

if (l[i]

return [False,i]

return True在python中,使用range(len(...))通常是不好的做法。更好的选择是enumerate,它返回一系列(index, value)对,但这并不能解决上述问题:

def des(l):

for i, v in enumerate(l):

if (v < l[i+1]):

return [False,i]

return True这仍然有IndexOutOfRange错误。我们可以通过假装我们迭代的列表来解决这个问题:

def des(l):

for i, v in enumerate(l[:-1]):

if (v < l[i+1]):

return [False,i]

return True而且你有更多的“pythonic”(即python专家会做的风格)解决方案。

此代码还有另外一个unpythonic问题:如果你执行if des(my_list)): ...,它将无效。这是因为非空的list(您在return语句中使用[]创建的内容始终是真的。

如果你想获得升序项的索引,那么实际上没有任何方法,但应该在函数名中更清楚。

另外,你做不到

is_descending, bad_index = des(...)因为您只是在成功时返回True。更好的是

def des(l):

for i, v in enumerate(l[:-1]):

if (v < l[i+1]):

return (False,i)

return (True, None)另请注意,我使用括号对结果对进行分组,这会创建一个新的tuple。通常,如果所有成员表示相同的事物,则应使用lists,如果成员表示不同的事物,则应使用tuple,例如在这种情况下,它们表示结果,以及发生故障的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值