python之循删list
先来看下循环遍历删除list元素的一段代码:
L=[1,3,1,4,3,6,5]
# 0 1 2 3 4 5 6(下标)
for i in L:
if i%2!=0:#%表示除商取余数,除以2余数为0,则表示为偶数,反之为奇数
L.remove(i)#若是奇数,则从list中剔除
print(L)
运行结果是:
[1, 2, 4]
想一下,1是奇数,为什么没有被删除?
逐步来分析下,首先取第一元素i=1(下标为0),判断1%2!=0条件成立,所以剔除1,这时L变为L1=[1,1,2,3,4,5]。这时第二个1的下标变成0了,for循环已经取过下标0的元素了,所以后面取值时会跳过L1中的第一个元素1。so切记:循环list时不要删除list中的元素,否则会导致下标错位,结果异常。
如果你非要循环删除list中元素,可以定义两个一样的list,如下所示:
L=[1,1,1,2,3,4,5]
# 0 1 2 3 4 5 6
L2=[1,1,1,2,3,4,5]#与L中元素下标一样
for i in L2:#从L2中循环,从L中删除元素
if i%2!=0:
L.remove(i)
print(L)
运行结果为:
[2, 4]
#循环遍历过程中,L2列表一直未改变,只删除L中的元素,这样保证了每次循环时下标未变。
将上述代码中,分别定义了两个一样的list,如果改成L2=L,运行下面程序,你会发现结果还正确吗?
L=[1,1,1,2,3,4,5]
# 0 1 2 3 4 5 6
# L2=[1,1,1,2,3,4,5]
L2=L
for i in L2:
if i%2!=0:
L.remove(i)
print(L)
运行结果:
[1, 2, 4]
可以看出,定义两个一样的list和L2=L,运行的结果不同,这就涉及到浅拷贝和深拷贝的概念。
定义的变量存储在内存中,实际上变量名存放的是内存地址,数据存放在另一块区域。从变量名找到存放数据的内存地址,就可以找到数据。
浅拷贝:L2=L或L2=L.copy(),这种方式,L2和L都指向同一块内存地址,所以L中元素被删除时,L2也是改变的。print(id())可打印内存地址
深拷贝:import copy这个模块,即L2=copy.deepcopy(L),L2和L的内存地址不一样,在内存中重新分配一个内存地址给L2.所以两个互不影响。
python之循删list的更多相关文章
- python while循环与for循环
今天刚看了一下python的while和for循环,所以打算记录一下: while语句是python中的循环条件语句,while 判断条件 : pass break 例如: i = 1 sum = 1 ...
- python while循坏和for循坏
while循坏 while 条件: 条件成立,执行循坏体(注意,while循坏必须有结束条件,不然会进入死循坏) 简单做个演示: # -*- coding:utf-8 -*- # Author:覃振鸿 ...
- python中的生成器
什么是生成器? 生成器是一个包含了特殊关键字yield的函数.当被调用的时候,生成器函数返回一个生成器.可以使用send,throw,close方法让生成器和外界交互. 生成器也是迭代器,但是它不仅仅 ...
- python 之编码问题详解
前在一个项目中遇到用post提交一个xml,xml中含有中文,对于单独的py文件,使用urllib2.urlopen完全ok,但在django中使用就一直报编码错误,然后在网上看到这篇文章不错,决定m ...
- Python学习--13 文件I/O
Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系 ...
- python学习笔记——列表操作
python列表操作——增 append:追加一条数据到列表的最后 name = ["Zhangsan","XiongDa","Lisi"] ...
- Python编码规范(PEP8)
Introduction 介绍 本文提供的Python代码编码规范基于Python主要发行版本的标准库.Python的C语言实现的C代码规范请查看相应的PEP指南1. 这篇文档以及PEP 257(文档 ...
- Python PEP 8 编码规范中文版
原文链接:http://legacy.python.org/dev/peps/pep-0008/ 转发链接:https://blog.csdn.net/ratsniper/article/detail ...
- python 编码规范起源:PEP8 编码规范中文版
PEP: 8 标题: Python代码的样式指南 版: c451868df657 最后修改: 2016-06-08 10:43:53 -0400(2016年6月8日星期三) 作者: Guido van ...
随机推荐
- 【Pytyon模块】logging模块-日志处理
一.日志相关概念 1.日志的作用 通过log的分析,可以方便用户了解系统或软件.应用的运行情况:如果你的应用log足够丰富,也可以分析以往用户的操作行为.类型喜好.地域分布或其他更多信息:如果一个应用 ...
- B - Given Length and Sum of Digits... CodeForces - 489C (贪心)
You have a positive integer m and a non-negative integer s. Your task is to find the smallest and th ...
- Java 知识点(二)
接<Java 知识点(一)> java的输入输出与 c 语言不同,下面介绍Java的格式: 16.因为Java的输入类Scanner,定义在java.util包中,所以Java需要输入时要 ...
- Python内置文件
概述 为了提升效率,Python有些内置文件如 __pycache__.py 详解 1)__pycache__.py, python程序运行时不需要编译成二进制代码,而直接从源码运行程序 Python ...
- UVA 10806 最小费用最大流
终于可以写这道题的题解了,昨天下午纠结我一下下午,晚上才照着人家的题解敲出来,今天上午又干坐着想了两个小时,才弄明白这个问题. 题意很简单,给出一个无向图,要求从1 到 n最短路两次,但是两次不允许经 ...
- ruoyi LogUtils
package com.ruoyi.framework.util; import java.io.PrintWriter; import java.io.StringWriter; import ja ...
- flask web实战1.27
1.在pycharm的terminal中输入 生成requirements.txt文件 pip freeze > requirements.txt 安装requirements.txt依赖 pi ...
- diverta 2019 Programming Contest 2自闭记
A 签到(a-b problem不用贴了吧,以后atcoder小于300分题均不贴代码) B 发现选择的p,q一定是其中两点间的距离,于是可以O(n2)枚举两点,再O(n2)判断,其实可以做到O(n3 ...
- HDU -1166 线段树
#include <algorithm> #include <iostream> #include<sstream> #include<cstring> ...
- HDU-4004 The Frog's Games (分治)
http://acm.hdu.edu.cn/showproblem.php?pid=4004 Problem Description The annual Games in frogs' kingdo ...