编写一个叫做is_sorted
的函数,接受一个列表作为参数,如果列表是递增排列的则返回 True
,否则返回False。 例如:
>>> is_sorted([1, 2, 2])
True
>>> is_sorted(['b', 'a'])
False
分析:
可以先对列表用.sort()方法进行递增排列,如果递增排列后的列表和原列表的元素都对应相同,说明原列表本身就是递增排列的。
一个错误的写法:
1
2
3
4
5
6
7
8
9
| def is_sorted(t):
t_copy = t[:]
print(t_copy)
if t_copy == t.sort():
return True
else:
return False
is_sorted([1, 2, 2])
|
程序没有报错,但它仍是错的,因为,我们要比较的是两个列表里的元素对应相同,而不是看这两个变量是不是指向同一个列表。t_copy和t.sort()肯定不指向同一个列表,但它们的元素对应相同。因此我们不能用t_copy == t.sort()
这样的方法来比较。可以这样做:
1
2
3
4
5
6
7
8
9
10
11
| def is_sorted(t):
t_copy = t[:]
for i in range(len(t)):
if t_copy[i] == t[i]:
#如果递增排列后的列表和原列表的元素都对应相同,说明原列表本身就是递增排列的
pass
else:
return False
return True
is_sorted([1, 2, 2])
|
还可以用另一种方法实现:从第二个元素开始,依次和前面一个元素比较大小。
字符串也可以进行大小比较。英文字母按字母顺序从小到大;所有的大写字母在小写字母前面,所以如果进行大小比较的话,'A'<'Z'<'a'<'z'
。
1
2
3
4
5
6
7
8
9
10
| def is_sorted(t):
for i in range(1,len(t)): #从1开始,而不是从0开始生成序列
if t[i] >= t[i-1]:
#如果从第二个元素开始,每一个元素都比它前面一个元素大,说明这个列表就是递增的
pass
else:
return False
return True
is_sorted([1, 2, 2])
|