提示:可以使用列表的排序方法将传入的列表进行排序,查看排序前后是否相同
课堂知识点:升序sort
def isSorted(st):
return sorted(st) == st #sorted()对列表进行排序
# ==比较排序后的列表sorted_st和原始列表st是否相等
# 如果相等,则说明列表已经排序,返回True,否则,返回False
st = input("请输入一个列表:")
print(isSorted(st))
测试程序:
def isSorted(st):
return sorted(st) == st
st = input("请输入一个列表:")
if isSorted(st): #isSorted()函数还可以检查列表是否已经升序排列
print("列表已经排好序。")
else:
print("列表没有排好序。")
或者直接这样写:只用一段代码实现功能:
tp = eval(input("请输入一个序列:"))
ls = list(tp)
ls_copy1 = ls.copy() # copy1是升序
ls_copy2 = ls.copy() # copy2是降序
ls_copy2.sort(reverse=True)
ls_copy1.sort()
if ls_copy1 == ls or ls_copy2 == ls:
print("你输入的序列是有序的")
else:
print("你输入的序列是无序的")
思路:冒泡排序+合并。
先遍历一个arr啊,这是一个外层循环,然后再写一个内层循环来比较元素,在外层循环的元素如果大于内层循环的元素,就插入。for循环
def ccdd(arr):
n = len(arr)# 遍历
for i in range(n): # 最后i个元素已经是排好序的了,不需要再比较
for j in range(0, n- i - 1): # 遍历数组从0到n-i-1
# 如果发现元素是逆序的
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
def merge(list1, list2):
ls = list1 + list2 # 合并
ccdd(ls) # 应用上面冒泡排序的方法
return ls
#测试代码
def ceshi():
list1 = input("list1: ").split()
list2 = input("list2:").split()
merged_list = merge(list1, list2)
# 打印合并后的列表
print("合并后列表:",merged_list)
知识点:set()、range()、split(),冒泡排序
1.Python中的set()
函数是一个无序的元素集合。集合是一个无序的、不重复的元素序列。set()
函数接收一个列表作为参数,并返回一个集合,其中包含了列表中的所有不重复元素。
2.range()
用来生成一个整数序列。排序方法用到。
它的语法是range(start, stop, step)
:
start
:序列开始的数字,默认为0。stop
:序列结束的数字,但不包括在内。step
:两个数之间的差(步长),默认为1。range()
函数生成的是一个range对象,不是一个真正的列表。print(list(range(数)))这样才变成列表
3.split()把字符串分割成列表。代码中用户输入字符串,然后使用 split()
函数把字符串分割为一个字符串列表。比如“1 2 3”→[1 2 3]
那么为什么在代码中“list1 = input("list1: ").split()”不写成“list1 = [input("list1:")]”呢,
这样写也不会报错,也能运行。但是这样直接获取一个包含用户输入的整数列表,如果用户输入 "1 2 3",那代码生成的是一个包含单个整数 "1" 的列表。
4.冒泡排序:外层循环跟内层循环作比较
-
比较相邻的元素。如果第一个比第二个大,就互相交换。
-
对每一对相邻元素作比较,从开始第一对到结尾的最后一对。最后的元素将会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
或者这样写,简单易懂又简洁
tp1 = eval(input("请输入一个升序"))
tp2 = eval(input("再输入一个升序"))
ls1 = list(tp1)
ls2 = list(tp2)
ls3 = ls1 + ls2
# ls3.sort()
print(ls3)