Python编码小记

标签(空格分隔): 编程 python


1.list类型remove()操作

列表对象执行remove()函数后,会自动退出循环,所以如果想利用一个单独的for循环删除列表中多个成员,是办不到的,可尝试使用多重循环。

例如下面的代码:

for item in test_list:
if item == 0:
test_list.remove(item)

如果test_list中为0的项多于两个,那么此循环在删除第一个0后便会退出循环,无法利用一个循环删除其中所有为零的项!字典也是如此。细想想,应该是remove后test_list发生了变化,无法继续迭代。

2.对元素为对象的list(或dict)进行deepcopy

如果一个列表或字典中,有元素为类对象(列表或字典中保存的应是对象的引用),那么用copy模块中deepcopy()进行拷贝后,相应引用地址会发生变化,相当于是类利用相同参数初始化的不同实例。

class Driver(object):
def __init__(self, name):
self.name = name
......
......
driver_list = []
driver1 = Driver('str1')
driver2 = Driver('str2')
driver_list.append(driver1)
driver_list.append(driver2)
copy_list = deepcopy(driver_list)
for item in driver_list:
if item.name == 'str1':
copy_list.remove(item)
......

在执行到最后的for循环中remove语句时,会提示列表中找不到对象。原因就是在deepcopy时对Driver类对象也进行了复制,复制产生的copy_list中项与原来driver_list中项,分配内存地址定然不同,而相应列表中存放的都是他们的引用(也就是地址),在copy_list中找不到相应元素也就顺理成章了。

3.可变对象与不可变对象

先看如下几行代码:

str1 = ' This is my test! '
list1 = ['this', 'is', 'my', 'test', ' ']
str1.strip()
for item in str1.split(' '):
.......
list2 = list1.remove(' ')[:2]

这段代码在执行时,line.3中str1执行了strip()后的值并未保存,str1值不变, for循环中 item还是会取到两个空值。line.6执行会报错TypeError,因remove()后无返回值,相当于对NoneType型对象切分。

究其原因就是因为可变对象与不可变对象的区分。字符串、元组、数字等均是不可变对象,字符串strip()后会产生一个新字符串,原变量str1的值不会改变,必须保存下新字符串才能使用;而列表、字典等可变对象,执行remove()等函数(不会有返回值)改变其值后,原变量值就已经改变,可直接使用原变量。

正确代码:

str2 = str1.strip()
for item in str2.split(' '):
.......
list1.remove(' ')
list2 = list1[:2]

python编码小记的更多相关文章

  1. 关于Python编码问题小记

    Python编码问题小记: 引子: 最近在复习redis,当我在获取redis的key的时候,redis 存储英文和汉字下面这个样子的,我知道汉字是用16进制的UTF-8编码了,然后突然很想搞清楚字符 ...

  2. (转载) 浅谈python编码处理

    最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息. 很快,我就遇到了异常: UnicodeEncodeError: ...

  3. Python 编码简单说

    先说说什么是编码. 编码(encoding)就是把一个字符映射到计算机底层使用的二进制码.编码方案(encoding scheme)规定了字符串是如何编码的. python编码,其实就是对python ...

  4. Python之路3【知识点】白话Python编码和文件操作

    Python文件头部模板 先说个小知识点:如何在创建文件的时候自动添加文件的头部信息! 通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View ...

  5. python编码规范

    python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ...

  6. 【转】python编码的问题

    摘要: 为了在源代码中支持非ASCII字符,必须在源文件的第一行或者第二行显示地指定编码格式: # coding=utf-8 或者是: #!/usr/bin/python # -*- coding: ...

  7. 【转】python编码规范

    http://blog.csdn.net/willhuo/article/details/49300441 决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是 ...

  8. python 编码 UnicodeDecodeError

    将一个py脚本从Centos转到win运行,出错如下: UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: il ...

  9. Python编码/文件读取/多线程

    Python编码/文件读取/多线程 个人笔记~~记录才有成长   编码/文件读取/多线程 编码 常用的一般是gbk.utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字 ...

随机推荐

  1. jQuery的jsop,jsonp跨域请求

    https://www.cnblogs.com/chiangchou/p/jsonp.html

  2. mysql大数据的分表

    在实际业务运作中,我们经常遇到一个表中数据量过大的问题,这样的话,问题就来了.如何将一个表中的数据均衡的放到多个表中? 我的建议是,新建一个表,但是只有一个自增的id字段,将其作为分表的依据.有大数据 ...

  3. ACM_“IP地址”普及(进制转换)

    “IP地址”普及 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大家都知道最近广财大校园网提速,现在就跟大家普及一下简单的互联网 ...

  4. [转]通过Net Manager 配置Oracle 11g本地监听服务(listener service)

    本文转自:http://blog.csdn.net/mozart_cai/article/details/8596504 [Target] 通过ip address 监听orcl服务,而不是通过loc ...

  5. Android项目实战_手机安全卫士拦截骚扰

    ###1.骚扰拦截需求分析1.界面1.1 黑名单列表界面1.2 添加黑名单界面2.功能2.1 黑名单的添加.删除2.2 拦截电话2.3 拦截短信 ###2.黑名单数据库的创建1.分析需要的字段id 主 ...

  6. JS——undefined、null

    1.undefined == false   //返回false 2.null == false     //返回false 3.undefined == null    //返回true 4.und ...

  7. CSS——精灵图与背景图片定位

    精灵图产生背景: 1.网页上的每张图像都需要向服务器发送一次请求才能展现给用户.2.网页上的图像过多时,服务器就会频繁地接受和发送请求,大大降低页面的加载速度.为了有效地减少服务器接受和发送请求的次数 ...

  8. 3星|《刷新》:微软第三任CEO上任三年后的回顾

    刷新:重新发现商业与未来 作者是微软第三任CEO,2014年2月上任.本书英文版出版于2017年9月,全书内容大致截至于2017年年初,算是作者上任三年后的回顾. 书中作者讲了不少自己的个人经历.作者 ...

  9. CNN结构:色彩特征提取-从RGB空间到HSV空间(色彩冷暖判断)

      转自知乎和百度百科:从零开始学后期             文章: 冷暖色区分?冷暖肤色适用于那些色系的彩妆?    文章:干货 |如何判断人体色冷暖?如何判断色彩冷暖?(值得收藏研读!) -蒜苗 ...

  10. (转) Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

    http://blog.csdn.net/u010648555/article/details/60767633 当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的 ...