鱼C论坛

 找回密码
 立即注册
查看: 439|回复: 24

[学习笔记] 新人学习贴_按顺序插入列表

[复制链接]
发表于 2026-5-24 18:42:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 网络草包 于 2026-5-24 18:47 编辑
  1. #需求:给定一个已经排序的整数列表,要求让用户输入一个数,并根据列表原有的排序规律将其插入到正确的位置
  2. l = [12, 33, 65, 75, 98]
  3. while True:
  4.     try:
  5.         num = int(input("请输入一个数字:"))
  6.         if num in l:
  7.             print("你输入的数字已存在请重新输入")
  8.             continue
  9.         for i in range(len(l)):
  10.             if l[i] > num:
  11.                 l.insert(i, num)
  12.                 break
  13.         else:
  14.             l.append(num)
  15.         print(l)
  16.     except:
  17.         print("请输入纯数字")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2026-5-24 18:42:45 | 显示全部楼层
你好!你的代码思路很清晰,但有几个小地方需要修正,这样才能正常运行:

1. 列表未初始化  
你需要先定义一个已排序的列表,例如:l = [1, 3, 5, 7, 9]

2. 判断条件写错了  
循环里应该是 if l[i] > num 而不是 if l > num

3. 缩进需要确认  
代码里的 else 应该是 for 的配套,你的缩进在当前文本里看起来是对的,但要注意在实际代码中保持正确。

下面是修正后的完整代码:

  1. l = [1, 3, 5, 7, 9]
  2. while True:
  3.     try:
  4.         num = int(input("请输入一个数字:"))
  5.         if num in l:
  6.             print("你输入的数字已存在请重新输入")
  7.             continue
  8.         for i in range(len(l)):
  9.             if l[i] > num:
  10.                 l.insert(i, num)
  11.                 break
  12.         else:
  13.             l.append(num)
  14.         print(l)
  15.     except:
  16.         print("请输入纯数字")
复制代码


这样就能实现「按顺序插入」的功能了,如果还有疑问欢迎继续提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-24 18:45:48 | 显示全部楼层
FishC 发表于 2026-5-24 18:42
你好!你的代码思路很清晰,但有几个小地方需要修正,这样才能正常运行:

1. 列表未初始化  

怎么发成你写的这个代码的这个样子?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-24 18:45:55 | 显示全部楼层
网络草包 发表于 2026-05-24 18:45
FishC 发表于 2026-5-24 18:42
你好!你的代码思路很 ...


你希望将代码发布成我回复中的样子,也就是使用 BBCode 格式。在 Discuz! 论坛中,代码块用
  1. 代码内容
复制代码
来包裹,行内代码用 行内代码 来显示灰底效果。  

例如:  
  1.   
  2. l =   
  3. while True:  
  4.     ...  
复制代码


如果你想在行内突出某个变量,可以写成:  
请使用 l.insert(i, num) 方法。  

这样就能和我回复中的格式一致了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-24 18:47:56 | 显示全部楼层
FishC 发表于 2026-5-24 18:45
你希望将代码发布成我回复中的样子,也就是使用 BBCode 格式。在 Discuz! 论坛中,代码块用  来包裹, ...

我把帖子修改了,在帮我看一下还有错吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-24 18:48:02 | 显示全部楼层
网络草包 发表于 2026-05-24 18:47
FishC 发表于 2026-5-24 18:45
你希望将代码发布成我 ...


您好!请将您修改后的完整代码贴出来,我再帮您检查一下还有没有错误。您可以直接用 代码 或代码块的方式提供。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-24 18:48:36 | 显示全部楼层
FishC 发表于 2026-5-24 18:48
您好!请将您修改后的完整代码贴出来,我再帮您检查一下还有没有错误。您可以直接用 代码 或代码块的方 ...
  1. #需求:给定一个已经排序的整数列表,要求让用户输入一个数,并根据列表原有的排序规律将其插入到正确的位置
  2. l = [12, 33, 65, 75, 98]
  3. while True:
  4.     try:
  5.         num = int(input("请输入一个数字:"))
  6.         if num in l:
  7.             print("你输入的数字已存在请重新输入")
  8.             continue
  9.         for i in range(len(l)):
  10.             if l[i] > num:
  11.                 l.insert(i, num)
  12.                 break
  13.         else:
  14.             l.append(num)
  15.         print(l)
  16.     except:
  17.         print("请输入纯数字")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-24 18:48:41 | 显示全部楼层
网络草包 发表于 2026-05-24 18:48
FishC 发表于 2026-5-24 18:48
您好!请将您修改后的 ...


你的代码逻辑大致正确,但有一处关键错误:if l > num: 这一行里 l 代表整个列表,不能直接和整数比较大小。应改为 if l[i] > num:,用索引访问列表中的元素。

修正后的核心部分如下:  
  1.     for i in range(len(l)):  
  2.         if l[i] > num:  
  3.             l.insert(i, num)  
  4.             break  
  5.     else:  
  6.         l.append(num)
复制代码


其他部分(如列表初始化、异常处理等)均正确。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-24 18:50:30 | 显示全部楼层
FishC 发表于 2026-5-24 18:48
你的代码逻辑大致正确,但有一处关键错误:if l > num: 这一行里 l 代表整个列表,不能直接和整数比较 ...

你眼花了吧?我的for循环下面写的的确是  if l[i] > num    啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-24 18:50:41 | 显示全部楼层
网络草包 发表于 2026-05-24 18:50
FishC 发表于 2026-5-24 18:48
你的代码逻辑大致正确 ...


不好意思,我重新仔细看了你贴出的最新代码:


  1. l =
  2. while True:
  3.     try:
  4.         num = int(input("请输入一个数字:"))
  5.         if num in l:
  6.             print("你输入的数字已存在请重新输入")
  7.             continue
  8.         for i in range(len(l)):
  9.             if l > num:        # 这里写的是 l,不是 l
  10.                 l.insert(i, num)
  11.                 break
  12.         else:
  13.             l.append(num)
  14.         print(l)
  15.     except:
  16.         print("请输入纯数字")
复制代码


你写的是 if l > num:,其中的 l 是字母 l 而不是数字 1,而且没有加上索引 l。如果按照这样运行,Python 会报错:TypeError: '>' not supported between instances of 'list' and 'int'(列表无法与整数比较大小)。

正确的写法应该是使用索引访问列表中的元素:if l > num:(注意是 l,索引 i 在方括号里)。

你可能是在论坛编辑时不小心写成了字母 l 而不是 l,或者混淆了标签的用法。请再检查一下你实际编辑框里的代码,确保是 l > num 而不是 l > num。如果确实写对了,那这段代码就能正常运行。

如果还有其他疑问,欢迎继续反馈。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-24 18:52:12 | 显示全部楼层
FishC 发表于 2026-5-24 18:50
不好意思,我重新仔细看了你贴出的最新代码:

你该进步了,眼神实在不好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-24 18:53:20 | 显示全部楼层
网络草包 发表于 2026-05-24 18:52
FishC 发表于 2026-5-24 18:50
不好意思,我重新仔细 ...


哈哈哈,您批评得对!是我眼花了,没看清您写的是 l 这个变量名。实际上 l 是列表的名字,而 l 才是正确的索引访问写法。您贴出的代码中 if l > num: 确实应该写成 if l > num:(即列表名后面跟方括号加索引变量 i)。  

如果您实际代码中写的是 if l > num:,那么它完全正确!是我误把 l 看成了 l,自动忽略了 部分。抱歉抱歉,我该去升级一下眼神补丁了!  

您的代码已经没问题,祝您学习愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-24 18:59:25 | 显示全部楼层
代码写得很工整,注释也很清晰。

不过 Python 有一个 bisect 模块,专门干这个事的,可以一行搞定:

import bisect
bisect.insort(l, num)

insert 和 insort 的区别在于 insort 会自动找到正确的位置插入,不用自己写循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-24 19:04:32 | 显示全部楼层
小派 发表于 2026-5-24 18:59
代码写得很工整,注释也很清晰。

不过 Python 有一个 bisect 模块,专门干这个事的,可以一行搞定:

可以写的完整一些吗?不知道怎么使用bisect.insort
应该放在哪个位置,能起到什么作用
可以省略哪些东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-25 11:54:46 From FishC Mobile | 显示全部楼层
FishC 发表于 2026-5-24 18:42
你好!你的代码思路很清晰,但有几个小地方需要修正,这样才能正常运行:

1. 列表未初始化  

我直接把数插入在最后,然后在排序一下,可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-25 11:54:53 | 显示全部楼层
lisunli2011 发表于 2026-05-25 11:54
FishC 发表于 2026-5-24 18:42
你好!你的代码思路很 ...


当然可以!直接把新数字追加到列表末尾,再对整个列表排序,完全正确,而且代码写起来更简单。不过有两点需要留意:

1. 性能:原方法的插入是 O(n) 的,而排序是 O(n log n) 的。如果列表很大(例如几十万个数),用排序会慢一些;对于日常小练习,完全看不出来差别,用哪种都行。

2. 需要确保排序后的顺序和原始顺序一致(比如都是升序)。你的原始列表已经是排序过的,所以排序后结果是一样的。

下面是改成排序后的代码(只替换了插入部分):

  1. l = [1, 3, 5, 7, 9]
  2. while True:
  3.     try:
  4.         num = int(input("请输入一个数字:"))
  5.         if num in l:
  6.             print("你输入的数字已存在请重新输入")
  7.             continue
  8.         l.append(num)
  9.         l.sort()
  10.         print(l)
  11.     except:
  12.         print("请输入纯数字")
复制代码


这样更简洁,而且逻辑正确。两种方法都可以达到目的,选择你喜欢的就好。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-25 12:27:21 From FishC Mobile | 显示全部楼层
FishC 发表于 2026-5-25 11:54
当然可以!直接把新数字追加到列表末尾,再对整个列表排序,完全正确,而且代码写起来更简单。不过有两 ...

代码内容
l = [12, 33, 65, 75, 98]
while True:
       num=int(input('请输入一个整数'))
       if num in l:
            print('你输入的数字已存在')
            break
       else:   
            l.append(num)
            l.sort()
            print(l)
            break
else:
    print('输入错误')   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-25 12:27:32 | 显示全部楼层
lisunli2011 发表于 2026-05-25 12:27
FishC 发表于 2026-5-25 11:54
当然可以!直接把新数 ...


你的代码思路是对的,但有几点需要调整才能达到“连续插入直到用户终止”的效果,而且你用了 while True,却写了两处 break,导致输入一次后程序就结束了。

下面是主要问题:

1. if num in l:查到重复数字后,用了 break。这会让循环直接结束,而你应该用 continue 让用户重新输入。  
2. 插完数字后也用了 break,这样只插入一次就退出了。如果你希望连续插入,不应该在这里 break,或者应该提供一个退出指令(如输入 q)。  
3. else 对应的是 whileelse,但由于循环没有正常结束(靠 break 退出),永远不会执行 else 块。  
4. 没有处理用户输入非数字的情况(容易崩溃)。

修正后的连续插入版本(用户输入 q 退出):


  1. l =
  2. while True:
  3.     user_input = input("请输入一个整数(输入 q 退出):")
  4.     if user_input == 'q':
  5.         break
  6.     try:
  7.         num = int(user_input)
  8.     except:
  9.         print("输入错误,请输入整数或 q")
  10.         continue
  11.     if num in l:
  12.         print("你输入的数字已存在,请重新输入")
  13.         continue
  14.     l.append(num)
  15.     l.sort()
  16.     print(l)
复制代码


这样程序会反复让你输入数字,直到你输入 q 才结束。如果你只需要插入一次就结束,那去掉外层的 while True 即可。

希望这个解释对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-25 12:38:36 From FishC Mobile | 显示全部楼层
FishC 发表于 2026-5-25 12:27
你的代码思路是对的,但有几点需要调整才能达到“连续插入直到用户终止”的效果,而且你用了 while Tru ...

l = [12, 33, 65, 75, 98]
while True:
    use=input('请输入一个整数,q退出')
    if use=='q':
       break
    try:   
       num=int(use)
   
       if num in l:
            print('你输入的数字已存在')
            continue
       else:   
            l.append(num)
            l.sort()
            print(l)
            continue
    except:
        print('输入错误')   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-25 12:38:47 | 显示全部楼层
lisunli2011 发表于 2026-05-25 12:38
FishC 发表于 2026-5-25 12:27
你的代码思路是对的, ...


你的代码已经很接近正确了,但有两个小细节需要修正,这样就能完美运行:

1. 列表初始化不正确  
   代码里写的是 l = ,这在 Python 中会报错,应该是一个空列表:  
  
  1. l = []  # 注意这里有中括号
复制代码


2. try 块内的缩进问题  
   你的代码里 num=int(use) 和后面的 if 没有对齐,导致语法错误。正确的写法应该让它们在同一缩进级别(都在 try 内部):  
  
  1.     try:
  2.         num = int(use)
  3.         if num in l:
  4.             ...
复制代码


另外,你使用了两个 continue(一个在 if 里,一个在 else 里),其实 else 里的 continue 是多余的,因为循环会自动继续,但留着也不影响运行。

修正后的完整代码:
  1. l = []
  2. while True:
  3.     use = input('请输入一个整数,q退出')
  4.     if use == 'q':
  5.         break
  6.     try:
  7.         num = int(use)
  8.         if num in l:
  9.             print('你输入的数字已存在')
  10.             continue
  11.         else:
  12.             l.append(num)
  13.             l.sort()
  14.             print(l)
  15.             # continue 可以删掉
  16.     except:
  17.         print('输入错误')
复制代码


这样就可以实现“输入数字自动插入并保持排序,重复数字提示,输入q退出”的功能了。继续加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-6-14 08:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表