编写一个函数,检查元组、列表和字符串是否排序



我正在尝试构建一个函数,如果输入的元组、列表和字符串已排序,则打印true,如果未排序,则显示False。我试过两种不同的方法,但都不起作用。。有人能告诉我哪里出了问题吗?非常感谢。

def is_ordered (*args):        
for i in range(1,len(args)):
if args[i - 1] > args[i]:
return True
else:
return False

def is_ordered (*args):        
if args == args.sorted()
return True
else:
return False

以下是我创建的列表和元组。

sorted_list = [1,2,3,4,5,6,7]
is_ordered(sorted_list)
unsorted_list = [41,3,35,4,45,6,7]
is_ordered(unsorted_list)
sorted_tuple = (1,2,3,4,5,6,7)
is_ordered(sorted_tuple)
unsorted_tuple = (41,3,35,4,45,6,7)
is_ordered(unsorted_tuple)
stri = "datascience"
is_ordered(stri)

您实际上不需要对输入进行排序来判断它是否已排序。您只需要查看每个项目是否小于或等于它之前的项目,如果不是这样,则返回False。这将比排序然后检查更有效。

您可以通过在zip(seq, seq[1:]这样的偏移量处压缩列表来将项目与邻居进行比较。

def is_ordered (seq):
'''Return true if every item is less than or equal the item after it'''
return all(a <= b for a, b in zip(seq, seq[1:]))
is_ordered('abcd')
#True
is_ordered('abdag')
#False
is_ordered([1, 2, 3, 4])
#True

如果希望使用sorted(),不要使用*args,只需接受一个序列作为参数,并理解sorted(someString)不会等于字符串,因为它构成了一个列表。所以你需要像比较一样:

def is_ordered (seq):
return list(seq) == sorted(seq)
is_ordered((1, 2, 3))
#True
is_ordered((1, 2, 3, 0))
#False
is_ordered("abcd")
# True
is_ordered("abcda")
# False

最新更新