美文网首页Python核心知识玩耍Python程序员
Python 序列容易忽视的知识点

Python 序列容易忽视的知识点

作者: CinderellaM | 来源:发表于2016-06-08 17:04 被阅读128次
文/CinderellaM

文章主要记录了条件和循环中的一些自己忽视的知识点,和一些自己在应用过程中出现的错误,系统的对这部分知识进行梳理与补充

一、序列

参考文献
成员有序排列,并且可以通过下标偏移量访问到它的一个或者几个成员。
访问模式:单个元素通过指定偏移量的方式得到,多个元素可以通过切片操作的方式一次得到。

1.序列类型操作符

  • 成员关系操作符 in、not in
  • 连接操作符+

string1+sring2
list1+list2
tuple1+tuple2
s+=t
```

  • 重复操作符*
    str*4可以看作str+str+str+str

str='123abc'
str*=3
print str

123abc123abc123abc
*操作符也可以用于嵌套列表
list=[1,2,3]
lista=[list]*3
lista[1][1]=100
'''lista是多少?可能并不是你想的那样'''
print lista

[[1,100,3],[1,100,3],[1,100,3]]
```
下面这幅图说明了原因,在处理可变序列时要谨慎:)

lista
  • 切片操作符[]、[:]、[::]
    [start:end)
    包含开始的元素,不包含结束的元素
    start和end均是可选的,如果没有提供或者用None作为索引值,切片操作会从序列的最开始到结束
    [start:end:step]
    start,start+1step.start+istep...

2.内建函数

  • 类型转换
    list()
    str()
    tuple()

    用于各种序列之间的类型转换,但是没有进行真正的类型转换。这3个函数实际上是工厂函数,将对象作为参数,并将其对象浅拷贝到新生成的对象中。
  1. 可操作

3.字符串

参考文献
字符串是不可变类型,改变一个字符串中的元素,需要创建一个新的字符串,并对其进行操作

  • 序列操作符切片
string='abcedef'
slice1=string[None:]
slice2=string[:None]
slice3=string[:]

>>slice1='abcdef'
>>slice2='abcdef'
>>slice3='abcdef'

删除string后,slice1并没有受到影响:

slice1=string[None:]
slice2=string[0:3]
slice1 is string
>>True
del string
print slice1
>>'abcdef'
print slice2
>>'abc'

直到删除了所有指向’abcdef‘的变量,其占用的内存被释放

slice1=string 没有指向该对象的变量 slice2=string[0:3]
  • 格式化操作符%
    ‘ % ’只适用于字符串类型,支持C语言中printf()函数的字符串格式化。
字符串格式化符号

Python支持两种格式的输入参数:

  • 元组
'MM/DD/YY=%02d/%02d%03d'  % (2,15,67)
  • 字典
    键是作为格式化字符串出现的。
'there are %(howmany)d %(lang)s Quotation Sysbols'  % {'lang':'Python','howmany':3}

格式字符串既可以用作向终端用户输出数据,又可以用来合并字符串形成新字符串,通过使用操作符的辅助命令,可以对需要显示的值的格式进行修改。


格式化操作符辅助命令

下面是一些例子:
浮点型

'%d' % 12.34
>>12
'%.1f' % 12.34
>>12.3

整形和字符串

'MM/DD/YY=%02d/%02d%03d'  % (2,15,67)
>>'MM/DD/YY=02/15/067

4.列表

参考文献

  • 序列操作符切片
listA=[1,2,3,4,5]
slice1=listA[:]
slice2=listA
slice3=list(lisAt)
listA
listB=[1,2,3,[4,5]]
slice1=listB[:]
slice2=listB
slice3=list(listB)

由下图可知,改变listB中的1,2,3,只有slice2受到影响。但是改变4,5,slice1、slice2、slice3均会受到印象,因为它们当中均存放着[4,5]的引用,而不是完全拷贝的独立对象。

listB

通过上面的分析,我们需要引起注意在使用列表作为函数参数时是很容易忽略这一点的,由于函数对列表不是深拷贝而只是引用了该列表的内存空间,所以一旦后续的操作对作为参数的列表进行修改,那么引用该列表的变量都会发生改变,这是非常糟糕的现象,而且很难被发现。因为虽然该列表可能是函数内的局部变量,可是因为一直有对象引用它,所以它占用的内存空间不会被释放和清理。比如下面的这段程序:

formTitle='a form name'
formPostion=(x,y)
col0=[]
col1=[]
for formx_row in range(row+3,sheet.nrows):
    col0.append(sheet.cell_value(formx_row-1,col))
    col1.append(Param.float_to_int(sheet.cell_value(formx_rolw-1,col+1)))
excel_ddrport.set_ddrport(formTitle,formPostion,col0,col1)

虽然程序中循环多次,试图把不同内容作为元组填入一个列表中,但是由于col0,col1是列表,所以最后生成的列表中col0,col1的值都是一样的,而且是最后一此退出循环时,col0,col1的值,而formTitle是字符串,每次对它的浅拷贝均会创建一个新的对象,所以formTitle是正确的。

  • 序列类型函数
    1. enumerate()
    2. zip()

5.元组

  • 创建一个只有一个元素的元组
    需要在元组分隔符里面加一个逗号(,),防止跟普通的分组操作符混淆
atuple=(1,)
  • 元组的可变性
    通过list()、tuple()函数,元组与列表间可以相互转换
atuple=(1,2,3)
alist=list(atuple)
print alist
>>[1,2,3]
  • 序列操作符切片

同列表

相关文章

  • Python 序列容易忽视的知识点

    文章主要记录了条件和循环中的一些自己忽视的知识点,和一些自己在应用过程中出现的错误,系统的对这部分知识进行梳理与补...

  • Python 模块容易忽视的知识点

    文章主要记录了模块中的一些自己忽视的知识点,和一些自己在应用过程中出现的错误,系统的对这部分知识进行梳理与补充 1...

  • 10、for循环语句

    上集回顾: 通用序列操作 可变序列操作 连续学习了两集Python列表技能,列表(list)这个可变序列相关知识点...

  • Python 面向对象编程容易忽视的知识点

    类既可以很简单,也可以很复杂。最简单的情况,类仅用作名称空间,这意味着你把数据保存在变量中,对他们按照名称空间进行...

  • Python 条件和循环容易忽视的知识点

    文章主要记录了条件和循环中的一些自己忽视的知识点,和一些自己在应用过程中出现的错误,系统的对这部分知识进行梳理与补...

  • Python学习-序列(list,tuple,str)

    查看所有Python相关学习笔记 序列相关知识点 序列: list 将字符串、元组转化为列表 tuple 将字符串...

  • python组合数据类型

    python 数据类型概览 重要知识点: 1 , 通过索引的方式提取元素或切片,只适用于有序序列,而无序序列则不行...

  • 最长公共子串 子序列 最长回文子串 子序列

    最长公共子串 子序列 最长回文子串 子序列 简单易懂的python代码 子串容易输出,子序列比较难(输出str而...

  • python 新手容易忽视的细节

    python新手容易忽视的细节。这是在我们刚学python这一门语言时,常常会踩的坑,参考并在此总结,希望能帮到你...

  • Python高级知识点学习(四)

    序列类型 Python中的序列类型,序列类型可以使用for循环遍历。 序列类,序列是python中非常重要的协议,...

网友评论

    本文标题:Python 序列容易忽视的知识点

    本文链接:https://www.haomeiwen.com/subject/yuujdttx.html