Python内置序列一(元组和列表)

Python序列类型

容器序列:

list、tuple、和collections.deque这些序列能存放不同类型的数据。

扁平序列:

str、bytes、bytearray、memoryview和array.array,这些序列只能容纳一种类型。

容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用,换句话说,扁平序列其实是一段连续的内存空间。由此可见扁平序列其实更加紧凑,但是它里面只能存放诸如字符、字节和数值这种基础类型。

可变序列

list、bytearray、array.array、collections.deque和memoryview

不可变序列

tuple、str和bytes

列表推导

示例1:把一个字符串变成unicode码位的列表


示例2


示例2为列表推导的结果,通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短。

元组

元组是不可变列表。

元组拆包

例一:city, year,pop,chg,area=('Tokyo',2003,32450,0.66,8014)

例二:交换两个变量的值:a, b = b, a

例三:>>>t = (20, 8)   >>>quotient, remainder = div(*t)

对对象进行切片

我们可以用s[a:b:c]的形式对s在a和b之间以c为间隔取值

对序列使用+和*

python程序员会默认序列是支持+和*的。通常+号两侧的序列由相同类型的数据所构成,在拼接的过程中,两个被操作的序列都不会被修改,python会新建一个包含同类型数据的序列来作为拼接的结果。

如果想要把一个序列复制几份然后再拼接起来,更快捷的做法是把这个序列乘以一个整数。

+和*都遵循这个规律,不修改原有的操作对象,而是构建一个全新的序列。

建立由列表组成的列表

例:一个包含3个列表的列表,嵌套3个列表各自有3个元素来代表井字游戏的一行方块,使用了列表推导


下例展示了另一个方法,这个方法看上去是个诱人的捷径,但实际上是错的


上述这个例子相当于把一个对象追加3次

序列的增量赋值

增量赋值运算符+=和*=的表现取决于它们的第一个操作对象,+=背后的特殊方法是__iadd__,但是如果一个类没有实现这个方法的话,python会退一步调用__add__。

如果a实现了__iadd__方法,就会调用这个方法。同时对可变序列(例如list、bytearray和array.array)来说,a会就地改动,就像调用了a.extend(b)一样。但是如果a没有实现__iadd__的话,a+=b这个表达式的效果就变得跟a=a+b一样了,首先计算a+b,得到一个新的对象,然后赋值给a。也就是说,在这个表达式中,变量名会不会关联到新的对象,完全取决于这个类型有没有实现__iadd__这个方法。

总的来讲,可变序列一般都实现了__iadd__方法,而不可变序列不支持这个操作。

list.sort方法和内置函数sorted

list.sort方法会就地排序列表,也就是说不会把原列表复制一份。这也是这个方法的返回值是None的原因,与list.sort相反的是内置函数sorted,它会新建一个列表作为返回值。这个方法可以接受任何形式的可迭代对象作为参数。

这两个函数的关键字参数:

reverse:如果被设定为True,被排序的序列里的元素会以降序输出。

key:一个只有一个参数的函数,这个函数会被用在序列里的每一个元素上。

当列表不是首选时

虽然列表既灵活又简单,但面对各类需求时,我们可能会有更好的选择。比如,要存放1000万个浮点数的话,数组(array)的效率要高的多,因为数组在背后存放的并不是float对象,而是数字的机器翻译,也就是字节表述。再比如说,如果需要频繁对序列做先进先出的操作,deque的速度会快得多

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

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,808评论 6 13
  • 序列类型 Python 标准库用 C 实现了丰富的序列类型, 列举如下。容器序列list、 tuple 和 col...
    时间之友阅读 290评论 0 0
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,359评论 0 4
  • 爸爸过世之后,妈妈老觉得爸爸走的太突然,一下子转不过弯来。听不见爸爸的哼哼,看不见爸爸要水喝,要药吃,要水果,要芝...
    janele阅读 184评论 0 0
  • 指针和数组是 C 语言中比较重要的知识点,尤其是指针和数组结合之后,很多同学就不清楚是怎么一回事了。在这里结合几个...
    GLGeek阅读 727评论 0 6