python中迭代问题
迭代list的时候不能修改这个list,否则,可能会出错。
numbers=[1,0,3,5,0]
numbers.sort()
print(numbers)
print('*************')
for i in numbers:
print(i)
if (i<5): #如果i是5,则弹出
numbers.pop(0)
else:
break
print(numbers)
输出为:
[0, 0, 1, 3, 5]
*************
0
[0, 1, 3, 5]
1
[1, 3, 5]
5
原因是,我们的numbers在弹出后改变了,而i却在每一次迭代中位置下移,所以我们输出的内容会有变化。
修改:
numbers=[1,0,3,5,0]
numbers.sort()
result=numbers#复制到result中
print(numbers)
print('*************')
for i in numbers:
print(i)
if (i<5): #如果i是5,则弹出
result.pop(0)
else:
break
print(numbers)
输出:
[0, 0, 1, 3, 5]
*************
0
[0, 1, 3, 5]
1
[1, 3, 5]
5
依然出错,因为我们虽然复制了一个,实际上,那是引用而已。
再次修改:
numbers=[1,0,3,5,0]
numbers.sort()
result=[i for i in numbers]#复制到result中
print(numbers)
print('*************')
for i in numbers:
print(i)
if (i<5): #如果i是5,则弹出
result.pop(0)
else:
break
print(numbers)
输出:
[0, 0, 1, 3, 5]
*************
0
[0, 0, 1, 3, 5]
0
[0, 0, 1, 3, 5]
1
[0, 0, 1, 3, 5]
3
[0, 0, 1, 3, 5]
5
这样就没有问题了。
python中迭代问题的更多相关文章
- Python中迭代输出(index,value)的几种方法
需求如下:迭代输出序列的索引(index)和索引值(value). 1.创建测试列表: >>> lst = [1,2,3,4,5] 2.实现方法如下: #方法1:range()+le ...
- python 中迭代和遍历的区别
什么是迭代? 迭代就是重复运行一段代码语句块的能力.分为两种方式 使用递归函数 使用循环(for 或 while 循环) 假设有个需求,要按照降序打印10以下(包括10),0 以上的整数,用递归和循环 ...
- python中for循环的底层实现机制 迭代
在python中,存在2种循环方式:for循环和while循环. while循环的实现很简单, 其本质就是一个条件语句,自定义条件,当条件满足的时候,不断执行while代码块. 但是for循环,究竟是 ...
- python中的迭代、生成器等等
本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...
- python中的迭代与递归
遇到一个情况,需要进行递归操作,但是呢递归次数非常大,有一万多次.先不说一万多次递归,原来的测试代码是java的,没装jdk和编译环境,还是用python吧 先看下原本的java代码: public ...
- Python学习-40.Python中的迭代
在上一篇中,我们使用了生成器来创建了一个可遍历的对象.在其中,我们使用了yield关键字. Python我也正在学习中,因此对yield的本质我并不熟悉,但是,在C#中,yield关键字则是语法糖,其 ...
- Python中的可迭代对象
Python中的可迭代对象有:列表.元组.字典.字符串:常结合for循环使用: 判断一个对象是不是可迭代对象: from collections import Iterable isinstanc ...
- Python中的可迭代对象/迭代器/For循环工作机制/生成器
本文分成6个部分: 1.iterable iterator区别 2.iterable的工作机制 3.iterator的工作机制 4.for循环的工作机制 5.generator的原理 6.总结 1.i ...
- python中可迭代对象、迭代器、生成器
可迭代对象 关注公众号"轻松学编程"了解更多. 1.列表生成式 list = [result for x in range(m, n)] g1 = (i for i in rang ...
随机推荐
- 【数据库】使用JMeter创建数据库(Mysql)测试
我的环境:MySQL:mysql-essential-5.1.51-win32 jdbc驱动:我已经上传到csdn上一个:http://download.csdn.net/detail/paulwin ...
- appium出现的问题记录
1,(自带的)启动模拟器提示 Starting emulator for AVD 'AVD_for_Galaxy_Nexus' emulator: ERROR: x86 emulation curre ...
- java web程序 上机考试做一个登陆注册程序
大二期末 java web.用到数据库,jdbc.myeclipse实现用户的注册,登陆 并且不能出现500错误,用户不能重复注册.当用户任意点击时也不能出现500错误! 这里.我只写注册成功的页面. ...
- Java设计原则之里氏替换原则
里氏代换原则由2008年图灵奖得主.美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出.其严格表述如下:如果对每一个类型为S的 ...
- [转]修改DLL
部分内容来自:http://blog.csdn.net/csdncshuan/article/details/51477705 为没有源码的DLL文件添加强名称 如果项目中引用了其他没有源码的dll文 ...
- Spring MVC 底层原理
参考博客:http://www.cnblogs.com/xiaoxi/p/6164383.html Spring MVC处理的流程: 具体执行步骤如下: 1 首先用户发送请求给前端控制器,前端控制器根 ...
- Sqoop+mysql+Hive+ Ozzie数据仓库案例
mysql 数据库脚本为: /*==============================================================*/ /* DBMS name: MySQL ...
- ioi2016aliens
/* 首先考虑点在直线的两边效果一样 于是转移到一边 之后发现当我们覆盖某些点时,有其他的一些点一定会被覆盖 我们找出所有必须覆盖的点 之后我们发现我们找到的这些点 将其按照x递增排序 那么y也是递增 ...
- nodejs——向另一个服务器发送文件
业务需要,需在客户本地建立一个服务,将本地的数据库文件发送到主服务器. 下面是本地服务代码: var exec = require('child_process').exec; var request ...
- 黏包的原理 (tcp udp) struct模块
黏包 指数据混乱问题(发送端发送数据,接收端不知如何去接收) 只有tcp协议才会发送粘包,udp不会发生 黏包(tcp) 有一个合包机制(nagle算法),将多次连续发送且间隔较小的数据,进行打包成一 ...