Python 04_List 和 Tuple 类型

01 Python 创建list

Python 内置的一种数据结构类型是列表:list !list 是一种有序的集合,可以随时添加和删除其中的元素。是数学意义上的有序集合, 也就是说,list 中的元素是按照顺序排列的。
构造 list ,直接用 [ ] 把 list 所有的元素包括起来,就是一个 list 对象。 通常情况下,会把 list 赋值给一个变量,这样就可以通过变量来引用 list。
由于 Python 是动态语言, 所以 list 中包含的元素并不要求都必须是同一种数据类型,完全可以在 list 中包含各种数据类型:

A = ['one', 100, True]

一个元素也没有的 list , 就是空 list。
小练习:假设班里有3名同学:Adam,Lisa和Bart,他们的成绩分别是 95.5,85 和 59,请按照 名字, 分数, 名字, 分数... 的顺序按照分数从高到低用一个list表示,然后打印出来。

>>>L = ['Adam', 95.5, 'Lisa', 85, 'Bart', 59]
>>>print L

02 Python 按照索引访问 list

list 是一个有序的集合,那么我们就可以用一个 list 按分数从高到低表示出班里的同学:

L = ['Adam', 'Lisa', 'Bart']

从 list 中获取 N 位同学就是通过索引来获取 list 中的指定元素。但是一定不能越界! 这点跟 C 的数组类似。 没学过 C 的就先自己体会吧。

03 Python 之倒序访问 list

还是以上面的班级的 3 个同学为例:

L = ['Adam', 'Lisa', 'Bart']

如果要获取最后一位同学,那么是不是要知道 list 中有多少元素,3 个元素,那么就是 L[2] , 如果我们使用倒序,则可以这样 L[-1] 表示倒数第一个, L[-2] 表示倒数第二个。

>>>print L[-1]
Bart

当然, 这样使用的时候, 也不能越界!

04 Python 之添加新元素

如果这个时候, 有一位新同学转到班上来,那么该怎样把新同学添加到现在的 list 中呢?
方法一: 就是使用 list 的 append() 方法,把新同学添加到 list 的末尾。 记住 append() 是添加到末尾。

>>>L = ['Adam', 'Lisa', 'Bart']
>>>L.append('Paul')
>>>print L
['Adam', 'Lisa', 'Bart', 'Paul']

方法二: 就是 list 中 insert() 方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素:

>>>L = ['Adam', 'Lisa', 'Bart']
>>>L.insert(0, 'Paul')
>>>print L
['Adam', 'Lisa', 'Bart', 'Paul']

这样就可以将 Paul 添加到索引为 0 的位置了。

05 Python 从 list 中删除元素

现在说是 Paul 转来班上, 那么 Paul 如果后来又要转走, 那么怎么从现在的 list 中删除呢?
如果 Paul 在最后一个, 那么可以用 list 的 pop() 方法删除:

>>>L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>>L.pop()
'Paul'
>>>print L
['Adam', 'Lisa', 'Bart']

从而得知, pop() 方法总是删掉 list 的最后一个元素,而且还会返回这个元素,所以在执行 L.pop() 之后会打印出 'Paul'。那么不在最后一个位置应该怎么破呢?
例如我们要删除 'Lisa'

>>>L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>>L.pop(1)
'Lisa'
>>>print L
['Adam','Bart', 'Paul']

把索引值填入 pop() 的参数中就可以了。
练习题:注意下面的编辑器代码中 list 如下:
L = ['Adam', 'Lisa', 'Paul', 'Bart']
Paul的索引是2,Bart的索引是3,如果我们要把Paul和Bart都删掉,请解释下面的代码为什么不能正确运行:
L.pop(2)
L.pop(3)
怎样调整代码可以把Paul和Bart都正确删除掉?

L = ['Adam', 'Lisa', 'Paul', 'Bart']
L.pop(2)
L.pop(3)
print L

06 Python 中替换元素

如果,Bart同学要转学走了,碰巧来了一个Paul同学,要更新班级成员名单,我们可以先把Bart删掉,再把Paul添加进来。
还可以直接用 Paul 将 Bart 换掉:

>>> L[2] = 'Paul'
>>> print L
L = ['Adam', 'Lisa', 'Paul']

对 list 中的某一个索引值, 就可以直接用新的元素替换原来的元素, list 包含的元素个数不变。
使用倒序替换掉也行:

>>> L[-1] = 'Paul'

07 Python 之创建 tuple

tuple 是另一种有序的列表, 中文翻译为 “元组”。 tuple 和 list 非常相似, 但是 tuple 一但建立完成, 就不能修改了。使用 tuple 创建:

>>>T = ('Adam', 'Lisa', 'Paul')

创建 tuple 和创建 list 唯一不同之处是用 () 代替了 [ ] 。那么现在这个 T 就不能改变了, tuple 没有 append() 方法, 也没有 pop() 和 insert() 方法。

获取 tuple 元素的方式和 list 是一模一样的,我们可以正常使用 T[0],T[-1]等索引方式访问元素,但是不能赋值成别的元素。

08 Python 之创建单元素 tuple

tuple 和 list 一样,可以包含 0 个、1个、任意多个元素。 0 个元素的 tuple , 也就是空 tuple, 直接用 () 表示:

>>> t = ()
>>> print t
()

包含一个元素的:

>>> t = (1)
>>> print t
1

结果是 1 , 而不是 () ;因为在 Python 中, () 既可以表示 tuple, 又可以作为括号表示运算时的优先级,结果 (1) 被 Python 解释器计算出结果为 1 。
正因为这样的歧义, 所以 Python 规定, 单元素 tuple 要多加一个逗号 “,”,这样就避免的歧义:

>>> t = (1,)
>>> print t
(1,)

Python在打印单元素tuple时,也自动添加了一个“,”,为了说明这是一个tuple。
多元素 tuple 加不加这个元素,效果都是一样的。

09 Python 之 “可变” 的 tuple

前面说到了创建了 tuple 就不能修改,那么现在看看 “可变” 的 tuple:

>>> t = ('a', 'b', ['A', 'B'])

然后我们通过 t[2] 拿到 tuple 中的 list 对象:

>>> L = t[2]

然后修改一下 list 中的两个元素:

>>> L[0] = 'X'
>>> L[1] = 'Y'
>>> print t
('a', 'b', ['X', 'Y'])

结果是变了、为什么变?
其实改变的不是 tuple ,而是 list 的元素。
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
练习:
定义了tuple:
t = ('a', 'b', ['A', 'B'])
由于 t 包含一个list元素,导致tuple的内容是可变的。能否修改上述代码,让tuple内容不可变?

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

推荐阅读更多精彩内容