Python 序列容易忽视的知识点

文/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]
  • 序列操作符切片

同列表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容