Python3学习三——数据结构1(列表,元组)

数据结构是通过某种方式(如对元素进行编号)组织在一起的数据元素的集合,这些元素可以是数字或字符。在Python中,最基本的数据结构是序列(Sequence)。Python包含6种内建序列,即列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。这里只说到最常用的两种,即列表和元组。

1. 通用操作

Python中所有序列都可以进行一些特定操作,包括索引(indexing)、切片(slicing)、序列相加(adding)、乘法(multiplying)、成员资格、长度、最小值和最大值。

索引和切片

在列表后面用 [] 加上数字就可以进行索引了。在索引里面用冒号 : 就可以切片了。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[1] #这就是索引,用下标指向列表里面的元素。
2
>>> a[0] #注意索引从0开始.
1
>>> a[1:3] #Python的切片功能非常强大,只用一个冒号就可以完成各种切片.
[2, 3]
>>> a[:]    #如果冒号前后没有数字,分别默认为第一个元素和最后一个元素
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[:-1]  #索引还可以是负号, 其中-1代表最后一个元素.
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:-1]   #注意 a[0:-1]和a[:-1]是一样的, 但是a[0:-1] 和a[0:] 不一样,请思考是为什么
[1, 2, 3, 4, 5, 6, 7, 8, 9]

切片操作的实现需要提供两个索引作为边界,第一个索引的元素包含在切片内,第二个索引的元素不包含在分片内。类似于数学里的a≤x<b,x是我们需要得到的元素,a是分片操作中的第一个索引,b是第二个索引,b不包含在x的范围内。
另外,切片里面还有一个默认参数,就是步长。默认情况下,步长为1,需要的时候,可以自定义。

>>> a[0:11:2] #第二个冒号后面就是步长, 如果不写的话默认是1, 现在我设定步长为2.
[1, 3, 5, 7, 9]
>>> a[11:3:-2]  #步长也可以设置为负数, 对应的前面的切边也要倒过来,大的序号写在前面, 小的序号写在后面.
[10, 8, 6]

对于正数步长,Python会从序列的头部开始向右提取元素,直到最后一个元素;对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素。正数步长必须让开始点小于结束点,而负数步长必须让开始点大于结束点。

序列的加法和乘法就不多说了,和字符串的加法乘法是类似的。

成员资格

Python为我们提供了in运算符,用来检查某个元素是否存在于某个序列。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 1 in a
True
>>> 0 in a
False
>>> 

注意in是一个运算符,运算符左边是元素,右边是列表,这就构成了一个判断语句,最终语句的结果是True或者False。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 1 in a
True
>>> 0 in a
False
>>> 'a' in a
False
>>> b = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
>>> 'a' in b
False
>>> 1 in b   #数字可以用in语句检查是否存在字符串列表中。
False
>>> c = '123456789'
>>> 'a' in c
False
>>> 1 in c  #但是数字不能用in语句检查是否存在字符串中。
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    1 in c
TypeError: 'in <string>' requires string as left operand, not int

长度、最小值和最大值

Python提供了三个内置函数len(), min(), max(),分别用于计算列表的长度,给出列表的最小值,给出列表的最大值。
用法非常简单,没什么好说的。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> len(a)
10
>>> min(a)
1
>>> max(a)
10
>>> b =  [1, 2,'hello', 10]
>>> len(b)
4
>>> min(b)
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    min(b)
TypeError: '<' not supported between instances of 'str' and 'int'
>>> 

然而请注意混合型的列表不能用min() 和max(),否则会出现类型错误。

2. 列表操作

列表的内容是可变的(mutable),这一点和字符串、元组不同。所以列表除了序列的通用操作,如索引、分片、相加、乘法之外,还有一些序列中没有而列表中有的方法。
这些方法的作用都是更新列表,有元素赋值、元素增加、元素删除、分片赋值和列表方法。

元素赋值

列表可以通过索引对元素进行赋值,而不可变的序列比如字符串和元组都不能进行这种操作。

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[1]=100
>>> a
[1, 100, 3, 4, 5, 6, 7, 8, 9, 10] #我们改变了索引为1的元素。
>>> b=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
>>> b[1] = 100
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    b[1] = 100
TypeError: 'tuple' object does not support item assignment  #Python不允许对元组的元素赋值。
>>> c = '123456789'
>>> c[1]='100'
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    c[1]='100'
TypeError: 'str' object does not support item assignment  #Python不允许对字符串的元素赋值。

元素增加和元素删除

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

推荐阅读更多精彩内容

  • 数据结构,是指通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可...
    千释炎阅读 759评论 0 0
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,911评论 17 410
  • 1.基本使用 1.1 数据类型 常用数据类型 Common Data Types 其他类型 Others 1.2 ...
    suwi阅读 1,324评论 0 3
  • 本文为《爬着学Python》系列第九篇文章。 从现在开始算是要进入“真刀真枪”的Python学习了。之所以这么说,...
    SyPy阅读 2,127评论 0 14
  • 表弟跟我说,他做了一个很特别的礼物:小心把核桃剥开,里面掏空后,放入一枚戒指,再用 502 胶水把核桃壳粘好,放在...
    张小岛儿阅读 761评论 0 0