Python(有序吗?)(合并两个有序列表)

提示:可以使用列表的排序方法将传入的列表进行排序,查看排序前后是否相同

课堂知识点:升序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)

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值