python关于一个简单排序算法的问题

小糊涂神儿 2018-01-29 08:58:37
刚学python,关于一个简单排序的问题,假定A是有序集合,要把无序B集合里的数插入到A集合中,我用了嵌套,但是在下面例子中,B集合里的1,1.1和0.5为何不没插入到A中,感觉是else那块错了,但是费了劲没想出来似乎绕进去了,还望请教明白人,感谢!

def test(A,B):
a = len(A)
b = len(B)
for j in range(0,b):
i = 0
while i <=a:
if B[j]>=max(A):
A.append(B[j])
break
elif A[i] >= B[j]:
A.insert(i,B[j])
break
else:
i = i+1
pass

a = [3]
b = [2,0,5,0.4,1,1.1,10,11,12,0.5]
test(a,b)
print (a)
...全文
411 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
混沌鳄鱼 2018-01-30
  • 打赏
  • 举报
回复

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Python 3.6

from bisect import insort

a = [3]
b = [2,0,5,0.4,1,1.1,10,11,12,0.5]

for n in b:
    insort(a, n)

print(a)

# [0, 0.4, 0.5, 1, 1.1, 2, 3, 5, 10, 11, 12]
还是有必要提示楼主一下,你在写的是Python不是C语言。
sanGuo_uu 2018-01-30
  • 打赏
  • 举报
回复
1,问题:A.insert这种最好别用,因为循环的时候A是会变的(它的index会变)。 2,解决:你把A、B混起来(a+b),然后再排序就好了
lfq0404 2018-01-29
  • 打赏
  • 举报
回复
按照你的思路应该是每次遍历新生成的A,再来排序 但你的a = len(A)绑定在循环外,在循环过程中时不会变化的 你放在第一个与第二个循环之间就行了

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧