Python基础数据类型学习2:列表

一、列表的简介

列表是包含0个或多个对象引用的有序序列,由于列表中所有数据项实际上都是对对象的引用,所以列表内可以存放任意数据类型的数据项,比如列表与元组。与元组不同的是,列表是可变的,我们可以很容易的对列表中的项进行删除或替换、删除。

二、列表的创建

空列表可使用中括号[]来创建,也可以使用list()函数进行创建。
非空列表的创建:一是可以使用中括号[]包含一个或多个用逗号分隔的数据项来创建;二是使用list()函数进行创建,list()函数只接受一个参数,所以可以提供一个由()包括的一个或多个用逗号分隔的数据项做为一个参数传递给list()函数,或是将其它对象(例如元组、字符串)传递给list()函数,list()函数就会尝试将给定的对象转换为列表;
示例:

>>>a=[]  #创建空列表
>>>b=list()  #利用函数创建空列表
>>>c=[1,2,3]  #创建含项的列表
>>>d=list((1,2,3))  #利用函数创建含项的列表
>>>e=(1,2,3)
>>>e
(1,2,3)
>>>f=list(e)  #利用list()函数将元组转换为列表
>>>f
[1,2,3]

三是使用列表内涵的方法来创建列表,小的列表我们通常可以直接使用列表定义来来创建,但对于一些数据项比较多的列表,就需要使用程序来进行创建了。列表内涵就是指使用一个在方括号中按规定的逻辑规则通过判断或循环条件来生成需要数据项的列表。
列表内涵的语法格式:
[expression for item in iterable (if condition)]
(if condition)条件语句是根据你的需求可选的。
例如:我们要将100以内的偶数生成一个列表:

>>> a=[]  #按一般程序来生成的列表
>>> for x in range(1,100):  #此处range函数作用是逐项返回1至100之间的整数项
    if x%2==0:
        a.append(x)  #将偶数加入到a列表的结尾
>>> a
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
>>>b=[x for x in range(0,100)]
>>>b
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>>c=[x for x in range(1,100) if x%2==0]  #使用函数内涵生成列表
>>> c
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]

同时使用列表内涵也可以进行嵌套。

>>> a=[str(x)+y+z for x in [1,2,3] for y in "abc" for z in ["abc","def","ghi","jkl"] if not (x==1 and y=="b")]
>>> a
['1aabc', '1adef', '1aghi', '1ajkl', '1cabc', '1cdef', '1cghi', '1cjkl', '2aabc', '2adef', '2aghi', '2ajkl', '2babc', '2bdef', '2bghi', '2bjkl', '2cabc', '2cdef', '2cghi', '2cjkl', '3aabc', '3adef', '3aghi', '3ajkl', '3babc', '3bdef', '3bghi', '3bjkl', '3cabc', '3cdef', '3cghi', '3cjkl']

三、列表的操作

(一)列表的方法

对于列表我们可以使用以下的方法进行操作:

语法 用途
list.append(x) 将数据项x追加到列表的尾部
list.count(x) 统计x在列表中出现的次数并返回
list.entend(y)
list+=y
将列表y中的项追加到list的结尾
list.index(x,start,end) 返回数据项x在列表中(或是在列表中start至end分区区块中)从最左算起出现的位置,如不存在就返回一个ValueError异常
list.insert(i,x) 在列表的第i项(i为整数)处插入数据项x
list.pop() 返回并删除列表最右的数据项
list.pop(i) 返回并删除列表第i项的数据项
list.remove(x) 将列表中从左边算起第一个数据项x移除,如果x不存在就产生一个ValueError异常
list.reverse() 将列表进行反转
list.sort(...) 对列表中的数据项进行排序

(二)列表项的读取

对于列表中项的读取我们可以使用索引位置、分片或是序列拆分的方式进行读取,我们首先创建一个示例列表:

>>>stu=["zhang","上海",16,"181厘米",["足球","羽毛球","english"]]
>>>stu
['zhang', '上海', 16, '181厘米', ['足球', '羽毛球', 'english']]

示例:

>>>stu[1]
'上海'
>>>stu[-4]  #负值从列表最右侧开始读取项
'上海'
>>>stu[0][2]  #对于python来说字符串也是对象,也可以进行位置索引和分片
’a'
>>> stu[-1][2]  #对于嵌套的列表也可以使用位置索引
'english'
>>> stu[2:]  #分片读取
[16, '181厘米', ['足球', '羽毛球', 'english']]
>>>stu[-1][:2]
['足球', '羽毛球']
>>> stu[-1][1][2]
'球'
>>stu[::2]  #使用分片读取数据项时,第三个参数为读取数据的步距,这里的2表示每隔2个读取数据,即读取0、2、4位置上的数据。
['zhang', 16, ['足球', '羽毛球', 'english']]

在有些情况下,我们也使用序列拆分的方式来实现对于数据项的读取。序列拆分需要使用拆分操作符*来进行。下面通过实例展示其用法:

>>>a,*b=[1,2,3,4]
>>> a
1
>>> b
[2, 3, 4]
>>>a,*b,c=[1,2,3,4]
>>> a
1
>>> b
[2, 3]
>>> c
4

(三)列表中项的修改和列表项的添加

  1. 列表内的数据项的修改
    利用索引位置修改数据项:
>>> stu=["zhang","上海",16,"181厘米",["足球","羽毛球","english"]]
>>>stu[2]=18
>>> stu
['zhang', '上海', 18, '181厘米', ['足球', '羽毛球', 'english']]
>>> stu[4][2]="英语"
>>> stu
['zhang', '上海', 18, '181厘米', ['足球', '羽毛球', '英语']]

除了按索引位置对数据项进行修改,还可以通过分片来对整个分片数据进行修改和替换,分片的长度与你的提供的数据项并不必须是等长的,如果提供的数据项比分片长度少,那么就会使列表变短;反之,就会使列表变长。

>>> stu[0:2]=["zhao","南京"]
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '英语']]
>>> stu[4][2:]=["乒乓球","棒球"]
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球']]
  1. 列表数据项的添加
    在列表的结尾处添加数据项我们可以使用+=运算符或是list.append()和list.extend()方法。它们的区别是list.append()方法只能将单个数据项添加到列表结尾,而+=和list.extend()则可以添加多个数据项到列表结尾。
>>> stu+=["80公斤","近视"]
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球'], '80公斤', '近视']
>>> stu[4].extend(["武术","围棋"])
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武术', '围棋'], '80公斤', '近视']
>>> stu.append("35号")
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武术', '围棋'], '80公斤', '近视', '35号']

而对于在指定位置添加数据项可以使用list.insert()方法和分片。

>>> stu.insert(1,"男")
>>> stu
['zhao', '男', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武术', '围棋'], '80公斤', '近视', '35号']
>>> stu[3:3]=["1999-06"]   #这里要注意添加的数据项一定要用中括号括上,否则python会将"1999-06"拆分为7个字符,向原列表中添加7个数据项
>>> stu
['zhao', '男', '南京', '1999-06', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武术', '围棋'], '80公斤', '近视', '35号']

(四)列表数据项的移除

移除列表中的数据项方法有很多种,可以使用list.pop()或是list.remove()方法,也可以使用del语句和分片。下面以实例说明:

>>> stu
['zhao', '男', '南京', '1996-06', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武术', '围棋'], '80公斤', '近视', '35号']
>>> stu[6].pop()  #使用不带参数的pop()方法时直接删除并返回最右侧的数据项
'围棋'
>>> stu.pop(3)  #使用带索引位置的pop()方法可直接将指定索引位置的数据项移除
'1996-06' 
>>> stu.remove('男')  #使用remove()方法移除掉从最左侧第一个相符的数据项
>>> stu
['zhao', '南京', 18, '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武术'], '80公斤', '近视', '35号']
>>> stu[1:3]=[]  #将索引位置1至2的分片赋值空列表,相当于删除索引位置1和2处的数据项
>>> stu
['zhao', '181厘米', ['足球', '羽毛球', '乒乓球', '棒球', '武术'], '80公斤', '近视', '35号']
>>> del stu[2][1:4]
>>> stu
['zhao', '181厘米', ['足球', '武术'], '80公斤', '近视', '35号']

(五)列表的排序和反转

对于列表的排序我们可以使用list.sort()方法或是sorted()。区别在于使用list.sort()会直接对列表本身进行排序修改,而使用sorted()则生成一个新的排序列表,而原列表不做更改。sorted()的用法很多,这里只介绍一下最简单的。

>>> a=[2,4,3,1,8,3,5,2]
>>> a.sort()
>>> a
[1, 2, 2, 3, 3, 4, 5, 8]
>>> b=["ab","a","dge","rdw","cf"]
>>> b.sort()
>>> b
['a', 'ab', 'cf', 'dge', 'rdw']
>>> c=[3,7,4,6,7,1,0]
>>> sorted(c)
[0, 1, 3, 4, 6, 7, 7]
>>> c  #使用sorted()进行排序原列表没有更改
[3, 7, 4, 6, 7, 1, 0]

使用list.reverse()可对整个列表进行反转。

>>> stu
['zhao', '181厘米', ['足球', '武术'], '80公斤', '近视', '35号']
>>> stu.reverse()
>>> stu
['35号', '近视', '80公斤', ['足球', '武术'], '181厘米', 'zhao']

(六)列表的其他操作

列表还支持使用in与not in进行成员关系测试,同时可以使用+和+=进行扩展连接,使用=进行复制操作。具体的大家可以自行测试。

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

推荐阅读更多精彩内容