09_列表(list)


时间:2018-11-02 作者:魏文应


一、列表

什么是列表

列表是用于存储一些有序数据对象。

创建列表

创建列表,通过中括号 [ ] 来创建列表:

my_list = []
print(type(my_list))

创建列表时,为列表指定元素:

my_list = [10, 2, 4, 7, 9]
print(my_list)

可以同一个列表存不同类型对象:

my_list = [10, None, 'hello', 1.2, True]
print(my_list)

列表索引

索引是从 0 开始的整数,列表第一个位置索引为 0,第二个位置索引为1 :

my_list = [10, 2, 4, 7, 9]
print(my_list[0])

上面就是打印第一个元素 10 。可以通过 len() 函数获取列表的索引:

my_list = [10, 2, 4, 7, 9]
print(len(my_list))

负数索引

负数表示倒数第几个,比如 -2 负2,表示倒数第 2 个元素:

students = ['天龙八部', '倚天屠龙记', '侠客岛']
print(students[-2])

二、切片

切片,就是从现有列表中,获取一个子列表,比如:

students = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print(students[1:4])

打印结果如下:

['倚天屠龙记', '侠客岛', '鹿鼎记']

通过切片获取指定的元素:

  • 做切片操作是,总会返回一个新的列表,不会影响原来的列表。
  • 通过切片获取元素时,包括起始位置的元素,不会包括结束位置 的元素。

省略参数

下面,是从索引1的位置,一直到最后:

students = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print(students[1:])

下面则是,从开始的位置,一直到索引值是 3 的位置(不包括 3):

students = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print(students[:3])

添加步长

语法:列表[起始:结束:步长]

比如:

students = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print(students[0:5:2])

打印结果为:

['天龙八部', '侠客岛', '雪山飞狐']

也就是隔一个步长取一个。步长不能是 0 ,但 步长可以是负数,则从列表的后部往前倒着取:

students = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print(students[::-1])

注意:负数时,如果有范围,则要这么写:

students = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print(students[4:0:-1])

为什么要把 4 放在前面,0 放在后面呢?这是因为 [start:end:step] ,也就是start是起始位置,你倒着取,start当然是原来的最后一个参数啦。

三、列表操作

列表拼接

通过加号 + 实现:

my_list = [1, 2, 3] + [4, 5, 6]
print(my_list)

打印结果如下:

[1, 2, 3, 4, 5, 6]

列表重复

通过乘号 * 实现:

my_list = [1, 2, 3] * 3
print(my_list)

打印结果如下:

[1, 2, 3, 1, 2, 3, 1, 2, 3]

元素检测

查看元素是否存在于列表中,使用 in 关键字:

my_list = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print('天龙八部' in my_list)

上面检测 '天龙八部' 这个元素是否在 my_list 这列表中,打印结果如下:

True

如果是检查某个元素是否 不存在 于列表中,使用 not in 关键字:

my_list = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print('天龙八部' not in my_list)

发现 '天龙八部' 在列表中,打印结果如下:

False

查看元素最大值和最小值

对于数值型列表,我们经常要找到其中的最大值或者最小值,例如:

arr = [1, 2, 3, 4, 5, 6, 7]
print(min(arr), max(arr))

函数 min() 取最小值, 函数 max() 取最大值,打印结果如下:

1  7

获取 index

获取索引值,例如:

my_list = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐']
print(my_list.index('天龙八部'))

这样,就会打印出元素 天龙八部 的索引值,打印结果如下:

0

如果元素在列表中有重复,它查找返回的是 首先索引到的索引值 。还可以指定索引范围:

my_list = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐', '天龙八部', '天龙八部']
print(my_list.index('天龙八部', 3, 7))

上面是在索引值为 3 到 7(不包括7)中的元素查找。

计算元素数目

统计指定元素在指定列表中出现的次数:

my_list = ['天龙八部', '倚天屠龙记', '侠客岛', '鹿鼎记', '雪山飞狐', '天龙八部', '天龙八部']
print(my_list.count('天龙八部'))

上面代码,统计了 天龙八部 这个元素个数,打印结果如下:

3

修改列表中的元素

修改列表中的某个元素:

stus = ['孙悟空', '沙和尚' ,'猪八戒', '唐僧', '蜘蛛精', '白骨精']
stus[0] = 'sunwukong'
print(stus)

将元素 孙悟空 修改为了 sunwukong ,打印结果如下:

['sunwukong', '沙和尚', '猪八戒', '唐僧', '蜘蛛精', '白骨精']

删除元素,删除列表中的某个元素:

stus = ['孙悟空', '沙和尚' ,'猪八戒', '唐僧', '蜘蛛精', '白骨精']
del stus[0]
print(stus)

上面代码,删除了元素 孙悟空,打印结果如下:

['沙和尚', '猪八戒', '唐僧', '蜘蛛精', '白骨精']

可以同时修改列表的多个元素,通过 切片 实现,这时,给切片进行赋值时,只能使用序列

stus = ['孙悟空', '沙和尚', '猪八戒', '唐僧', '蜘蛛精', '白骨精']
stus[0:2] = ['红孩儿', '牛魔王']
print(stus)

同时修改了索引值为 0 和 1 的元素值,打印结果如下:

['红孩儿', '牛魔王', '猪八戒', '唐僧', '蜘蛛精', '白骨精']

四、列表的方法

末尾添加 (append)

通过 append() 方法在列表的末尾添加一个元素:

stus = ['孙悟空', '猪八戒', '沙和尚']
print('原列表:', stus)
stus.append('唐僧')
print('append后的列表:', stus)

这样,唐僧 这个元素就会被添加到 stus 这个列表的后面,打印结果如下:

原列表: ['孙悟空', '猪八戒', '沙和尚']
append后的列表: ['孙悟空', '猪八戒', '沙和尚', '唐僧']

插入元素(insert)

往列表中插入一个元素,通过 insert() 方法:

stus = ['孙悟空', '猪八戒', '沙和尚']
print('原列表:', stus)
stus.insert(1, '唐僧')
print('insert后的列表:', stus)

stus 列表索引值为 1 的位置,插入一个元素 唐僧 ,打印结果如下:

原列表: ['孙悟空', '猪八戒', '沙和尚']
insert后的列表: ['孙悟空', '唐僧', '猪八戒', '沙和尚']

清除元素(clear)

清空列表中的所有元素:

stus = ['孙悟空', '猪八戒', '沙和尚']
stus.clear()
print(stus)

所有元素都被清空了,打印结果如下:

[]

根据索引删除元素(pop)

根据索引值,删除一个元素并返回被删除的元素值:

stus = ['孙悟空', '猪八戒', '沙和尚']
a = stus.pop(2)
print('删除的元素:', a)
print('删除后的列表:', stus)

这样,就删除了列表中索引值为 2 的元素。打印结果如下:

删除的元素: 沙和尚
删除后的列表: ['孙悟空', '猪八戒']

del() 也能实现类似的效果,但是没有返回值:

stus = ['孙悟空', '猪八戒', '沙和尚']
del(stus[2])
print('删除后的列表:', stus)

根据值删除元素(remove)

删除指定值的元素,如果有多个值相同,只删除靠前的一个:

stus = ['孙悟空', '猪八戒', '沙和尚', '孙悟空']
stus.remove('孙悟空')
print('删除后的列表:', stus)

上面,把第一个元素 孙悟空 给删除了,打印结果如下:

删除后的列表: ['猪八戒', '沙和尚', '孙悟空']

反转列表(revert)

将列表的元素位置反转:

stus = ['孙悟空', '猪八戒', '沙和尚']
stus.reverse()
print(stus)

元素的位置改变了,打印结果如下:

['沙和尚', '猪八戒', '孙悟空']

元素排列(sort)

通过 sort() 方法进行排列:

stus = ['a', 'c', 'b', 'f', 'g', 'm', 'i']
stus.sort()
print(stus)

上面,安装 ASCII 码表进行 升序排列,打印结果如下:

['a', 'b', 'c', 'f', 'g', 'i', 'm']

如果需要 ASCII 表 降序排列 ,打印结果如下:

stus = ['a', 'c', 'b', 'f', 'g', 'm', 'i']
stus.sort(reverse=True)
print(stus)

通过反转 reverse 参数,安装 ASCII 码表进行降序排列,打印结果如下:

['m', 'i', 'g', 'f', 'c', 'b', 'a']

遍历列表

可以使用循环语句来实现,比如使用 while 语句:

stus = [1, 2, 3]
i = 0
while i < len(stus):
    print(stus[i])
    i += 1

列表中的元素将被依次打印出来。更好 方法是用 for 语句:

stus = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for s in stus:
    print(s)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 1.1 列表的定义 List(列表) 是Python中使用最频繁的数据类型,在其他语言中通常叫做数组 专门用于存储...
    体面_5376阅读 850评论 0 0
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,911评论 17 410
  • Python简介 Python历史 Python 是由 Guido van Rossum 在八十年代末和九十年代初...
    莫名其妙的一生阅读 1,040评论 0 2
  • 今天下了一个名叫简书的APP,随便翻翻看到一篇文章,里面提到一句话“每天写一千个字”,我觉得是件很有意思的事情。从...
    一支粗人阅读 138评论 0 1
  • 刚刚学习累了,刷了下朋友圈,看到以前一个很好的朋友发朋友圈秀恩爱,很吃惊,因为根本不知道他还有对象这事,一直以为他...
    世界喜欢坚强的姑娘阅读 170评论 0 0