几个月过去了,小白逐渐对公司的后端服务熟悉了,不过这天小白又接到一封神秘邮件,是景女神发来的:公司急需一批对语言算法有些了解的优秀员工,鉴于你在公司的表现很不错,现在给到你一个培训机会,请速到开发部报道!

  小白这次没有疑惑,整理好文件后就去了开发部报道,一看到在开发部培训的是小刘,小白是喜上眉梢。

  小刘一见是小白来了,跟见了老熟人似得,心里也是乐开了花,不过小刘没有表示的很淡定,并直接切入到整体

  小刘:小白,过来!我先考考你,有这么一个列表li = [11,22,33,44],我要求你把22和33的位置对调一下?你做做看看

  小白心里想这还不简单,用li[2] = li[1],再li[1] = li[2],然后就有如下代码

  

  小白测试一下,发现不是自己想要的结果,不过小白马上想到在这个赋值过程中会改变值,于是小白马上转换了思路,写下了下面的代码

  

  小白对自己的这种方法得到的结果非常的满意,然后把自己的代码给到小刘看

  小刘先是点头,然后又是摇头,然后跟小白说:你这方法可行,不过你不觉的这方法有什么不足吗?

  小白想了想:有!移除一个元素后会打破列表原有的顺序,因为这个,我刚才还有点思绪紊乱

  小刘:对!那我告诉你一种更简单的方法,看好了。

  

  小白看完后,连连称妙!

  小刘:这个原理懂了吧?那我们直接进入到冒泡排序吧!

  小白:冒泡排序?

  小刘:对!刚才我讲的就是冒泡排序的原理!那小白你看这个最后输出什么?

li = [33,2,10,1]

for i in range(len(li)-1):
if li[i] > li[i+1]:
temp = li[i]
li[i] = li[i+1]
li[i+1] = temp print(li)

  小白很认真,在旁边画起了图...

  

  小白恨得意的把结果报给了小刘

  小刘也连忙夸奖小白聪明,小刘接着问道小白:小白!那它到底干了什么了?

  小白如有所思的回答到:看这结果,是最大值弄到最右边!

  小刘连忙点头:这其实已经对一个数字排好了序,那如果把整个列表按从左往右升序排列,工作做到这里了,小白!接下来你会怎么做了?

  小白边思考边写代码

   

for i in range(len(li)-2):
if li[i] > li[i+1]:
temp = li[i]
li[i] = li[i+1]
li[i+1] = temp print(li)

  此次的结果为[2, 1, 10, 33]

  小白心想,不就差一步的事

  

for i in range(len(li)-3):
if li[i] > li[i+1]:
temp = li[i]
li[i] = li[i+1]
li[i+1] = temp print(li)

  小白会心的一笑,大功告成,不过小白立即想到,代码好多是重复的,肯定有优化方案,小白脑中灵光闪现--递归

def maopao(data,j=1):
if len(data) - j == 0:
return data
else:
for i in range(len(data)-j):
if data[i] > data[i+1]:
temp = data[i]
data[i] = data[i+1]
data[i+1] = temp r1 = maopao(data,j+1)
return r1 li1 = [33,2,10,1]
ret = maopao(li1)
print(ret)

  小白高高兴兴把结果告诉了小刘

  小刘哈哈大笑,不过以前培训过的小白啊,居然还用到了递归,不过我这边还有一种代码更短的方案哦!想不想看?

  小白点点头

  小刘:其实可以再用一次循环,来替代递归的,你看

li = [11,33,56,27,756]
for j in range(1,len(li)): #注意这里range要从1开始 j:1,2,3...
for i in range(len(li)-j):
if li[i] > li[i+1]:
temp = li[i]
li[i] =li[i+1]
li[i+1] = temp print(li)

  小白看了,不停点头叫好

  小刘:冒泡排序就讲完了,今天到此为止啦

  小白:就讲完了啊,好吧!

  小刘:可以下班回家了,另外这个你可以回去看一下,二维数组的转换

data = [[col for col in range(4)] for row in range(4)]
print(data)
for i in data:
print(i)
结果为:
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]
[0, 1, 2, 3]

  小刘:上面这个叫二维数组,转换思路如图:

  

#方法一:
data = [[col for col in range(4)] for row in range(4)]
print(data) for row in range(4):
for col in range(4):
if col > row:
temp = data[row][col]
data[row][col] = data[col][row]
data[col][row] = temp print(data)
#方法二:
data = [[col for col in range(4)] for row in range(4)]
print(data)
for i in data:
print(i) for m in range(4):
for n in range(4):
if n > m:
r_dt = data[m].pop(n)
c_dt = data[n].pop(m)
print('操作中:',data)
data[m].insert(n,c_dt)
data[n].insert(m,r_dt)
print('替换后:',data)

  小白:你辛苦了

  

欢迎大家对我的博客内容提出质疑和提问!谢谢

                                                                             笔者:拍省先生  

  

最新文章

  1. S1java基础学习笔记
  2. IIS 7.5 + PHP-5.6.3 + mysql-5.6.21.1
  3. HTML和CSS高级指南——定位详解
  4. ylbtech-Bill(发票管理)-数据库设计
  5. Dispatcher
  6. 不逃离WIndows,Asp.Net就只能写写进销存管理系统
  7. Oracle由ID生成父ID的函数
  8. (转)JavaScript 开发者经常忽略或误用的七个基础知识点
  9. ping操作
  10. Eclipse常用的6个Debug技巧
  11. CGLIB 动态代理的实现
  12. Python 3 利用 Dlib 19.7 和 sklearn机器学习模型 实现人脸微笑检测
  13. 72. Edit Distance(困难,确实挺难的,但很经典,双序列DP问题)
  14. 转载:Linux命令之查看文件占用空间大小-du,df
  15. Dynamics CRM 如何修复 Access Is Denied - ObjectTypeCode: 2500 的错误
  16. day 06Hadoop
  17. 关于前一篇innodb自增列自己的一点补充
  18. XHML教会我的一些东西-5
  19. Visual Studio 2012 与此版本的 Windows 不兼容 解决
  20. Image Processing - Pseudo(False) Color Processing

热门文章

  1. pip install 报错UnicodeDecodeError: 'ascii' codec can't decode byte
  2. How to dynamically load directive into page
  3. Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路
  4. Rails 状态码
  5. 用键盘控制DIV && Div闪烁
  6. 倍福TwinCAT(贝福Beckhoff)基础教程 松下驱动器试运行提示过速度保护怎么办
  7. SQL SERVER 使用订阅发布同步数据库(转)
  8. Linux 下Office 软件名称
  9. 【Excle数据透视表】如何快速选定数据透视表的汇总行并添加绿色底纹
  10. jquery:选择器(转)