所以问题如下,我需要创建一个检查列表是否升序的函数。如果是,则该函数必须返回True。此外,如果列表由零个元素或一个元素组成,则它必须返回True。如果列表未升序,则必须返回False。
我尝试使用类似的代码,但是我使用了while循环和计数器来代替for循环,但仍然无法使函数正常工作。
def is_ascending(items):
if len(items) == 0 or len(items) == 1:
return True
for i in list(range(len(items))):
if items[i] >= items[i + 1]:
return False
break
else:
return True
我已经尝试了以下带有以下列表的代码
预期结果
[-5、10、99、123456]:对
[2,3,3,4,5]:错
[99]:是
[]:是
[4、5、6、7、3、7、9]:错误
[1,1,1,1]:错误
意外结果
[-5、10、99、123456]:对
[2,3,3,4,5]:对--这应该是错误的
[99]:是
[]:是
[4、5、6、7、3、7、9]:对--这应该是错误的
[1,1,1,1]:错误
答案 0 :(得分:1)
您可以在列表上使用set
+ sorted
并与原始列表进行比较:
def is_ascending(items):
return sorted(set(items)) == items
问题您的代码:
True
/ False
。您从未比较所有元素。更正的代码:
def is_ascending(items):
if len(items) == 0 or len(items) == 1:
return True
for i in range(len(items) - 1):
if items[i] >= items[i + 1]:
return False
return True
答案 1 :(得分:1)
pythonic方法是比较压缩的元组,这可能比for循环和索引更易于阅读和推理。如果值有误,它也会在长列表上提前保释(就像您当前的想法一样):
def is_ascending(items):
return all(i < j for i, j in zip(items, items[1:]))
is_ascending([2, 3, 3, 4, 5]) # False
is_ascending([99]) # True
is_ascending([2, 3, 4, 5, 15]) # True
答案 2 :(得分:0)
您的逻辑是正确的。只需检查以下更正,即可正常工作。
在其他情况下返回True的情况下,如果第一个数字小于第二个,则条件返回,因此不检查列表中的其他数字。
通过以下更改检查代码:
def is_ascending(items):
if len(items) == 0 or len(items) == 1:
return True
for i in list(range(len(items) - 1)):
if items[i] >= items[i + 1]:
return False
break
return True
希望这会有所帮助!