13-列表

列表

列表是Python中最基本也是最常用的数据结构之一。列表中的每个元素都被分配一个数字作为索引,用来表示该元素在列表内所排在的位置。第一个元素的索引是0,第二个索引是1,依此类推。

Python的列表是一个有序可重复的元素集合,可嵌套、迭代、修改、分片、追加、删除,成员判断。

从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针。

对于这个列表 alist = [1, “a”, [11,22], {“k1”:”v1”}],其在内存内的存储方式是这样的:

image.png

创建方式

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可

list = []       # 定义空列表
list1 = ['physics', 1997, 2000]
list2 = [1, 2, 3]
list3 = ["a", "b", "c"]

访问列表内的元素

列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一 。要访问它的某个元素,以方括号加下标值的方式即可。注意要确保索引不越界,一旦访问的 索引超过范围,会抛出异常。所以,一定要记得最后一个元素的索引是len(list)-1。

>>> lis = ["a", "b", "c"]
>>> lis[0]
'a'
>>> lis[1]
'b'
>>> lis[2]
'c'
>>> lis[3]
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    lis[3]
IndexError: list index out of range

修改元素的值

直接对元素进行重新赋值。

>>> lis[0]
'a'
>>> lis[0] = "d"
>>> lis[0]
'd'

删除元素

使用del语句或者remove(),pop()方法删除指定的元素。

>>> lis = ["a", "b", "c"]
>>> del lis[0]      # 根据索引删除
>>> lis
['b', 'c']
>>> lis.remove("b") # 直接根据值进行删除
>>> lis
['c']
>>> lis.pop()       # 弹出最后一个
'c'
>>> lis
[]

列表的特殊操作

语句                          结果                              描述
[1, 2, 3] + [4, 5, 6]          [1, 2, 3, 4, 5, 6]               组合两个列表
['Hi!'] * 4                   ['Hi!', 'Hi!', 'Hi!', 'Hi!']       列表的乘法
3 in [1, 2, 3]                 True                            判断元素是否存在于列表中
for x in [1, 2, 3]: print x,    1 2 3                           迭代列表中的每个元素

列表的常用函数

函数        作用
len(list)   返回列表元素个数,也就是获取列表长度
max(list)   返回列表元素最大值
min(list)   返回列表元素最小值
list(seq)   将序列转换为列表

>>> s = list((1, "a", "b", 2))
>>> s
[1, 'a', 'b', 2]
>>> max(s)          # 不能混合不同类型进行最大最小求值
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    max(s)
TypeError: '>' not supported between instances of 'str' and 'int'

排序和反转

list.reverse()  将列表反转
list.sort()     排序,默认升序 
如果列表内的元素全为数字,或者字母排序没有问题。
如果字母和数字都有的情况下,排序会报错
list.sort(reverse=True)     降序排列

切片--也叫截取

切片指的是对序列进行截取,选取序列中的某一段。

切片的语法是: list[start:end]

以冒号分割索引,start代表起点索引,end代表结束点索引。省略start表示以0开始,省略end表示到列表的结尾。注意,区间是左闭右开的!

如果提供的是负整数下标,则从列表的最后开始往头部查找。例如-1表示最后一个元素,-3表示倒数第三个元素。

切片过程中还可以设置步长,以第二个冒号分割,例如list[3:9:2],表示每隔多少距离取一个元素。

a = [1,2,3,4,5,6,7,8]
a[2:4]      [3,4]
a[:7]       [1,2,3,4,5,6,7]
a[2:]       [3,4,5,6,7,8]
s = a[:]    复制列表
s
[1,2,3,4,5,6,7,8]
s.remove(2) 删除2元素 并不是根据下标进行删除的
s = [1,3,4,5,6,7,8] 

a[-1]       8
a[-5:]      [4,5,6,7,8]
a[::-1]     想当于逆序输出 [8, 7, 6, 5, 4, 3, 2, 1]
a[1:5:2]    [2,4]

多维列表(嵌套列表)

a = [[1,2,3],[4,5,6],[7,8,9]]
a[0][1]
2
a = [[1,2,3],[4,5,6],{"k1":"v1"}]
a[2]["k1"]
v1

列表的遍历

列表有好几种遍历方式:

a = [1,2,3,4,5,6]
for i in a:             # 遍历每一个元素本身
    print(i)
for i in range(len(a)):     # 遍历列表的下标,通过下标取值
    print(i, a[i])
x = 9
if x in a:      # 进行是否属于列表成员的判断。该运算速度非常快。
    print("True")
else:
    print("False")

列表的内置方法

方法              作用
append(obj)     在列表末尾添加新的对象
count(obj)      统计某个元素在列表中出现的次数
extend(seq)     在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
index(obj)      从列表中找出某个值第一个匹配项的索引位置
insert(index, obj)  将对象插入列表
pop(obj=list[-1])   移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
remove(obj)      移除列表中某个值的第一个匹配项
reverse()       反向列表中元素
sort([func])     对原列表进行排序
copy()          复制列表
clear()         清空列表,等于del lis[:]

注意:其中的类似 append,insert, remove 等方法会修改列表本身,并且没有返回值

练习

test = ["a", "b", "c", "d"]
test.append("A")
test
["a", "b", "c", "d","A"]

lis.append(['a'])
['a', 'b', 'c', ['a']]

-----------------------------------------
test.count()    并不是求列表元素个数,而是求其中一个元素出现的次数
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    lis.count()
TypeError: count() takes exactly one argument (0 given)
test.count("a")
1
lis = ['a', 'b', 'c', ['a'], ['a', 'b']]
lis.count('a')      # 会出现几次?
1
lis.count(['a'])
1

-----------------------------------------

test.extend(["e","f"])
test
["a", "b", "c", "d","A","e","f"]

append(object) 是将一个对象作为一个整体添加到列表中,添加后的列表比原列表多一个元素,该函数的参数可以是任何类型的对象,
该函数没有返回值     

extend(iterable) 是将一个可迭代对象中的每个元素逐个地添加到列表中,可迭代对象中有几个元素,添加后的列表就比原列表多几个元素,
该函数的参数必须是可迭代的对 象,改函数没有返回值

-----------------------------------------
test
["a", "b", "c", "d","A"]

test.index("a")
0
test.index("A")
4
-----------------------------------------

test.insert(3,"C")
["a", "b", "c", "C","d","A","e","f"]

-----------------------------------------

test.pop()
test
["a", "b", "c", "C","d","A","e"]
test.pop(4)             # 根据位置弹出
d

-----------------------------------------

test.remove(3)   删除不是根据下标进行删除的,删除是根据键值来删除的
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    lis.remove(3)
ValueError: test.remove(x): x not in list
test.remove("e")

-----------------------------------------

test
["a", "b", "c", "C",A","f"]
test.reverse()      逆序输出
['f', 'A', 'C', 'c', 'b', 'a']
newlist = test.copy()
newlist
['f', 'A', 'C', 'c', 'b', 'a']
newlist.clear()     清空列表
newlist
[]
test.sort()
['A', 'C', 'a', 'b', 'c', 'f']    按照ASCII字符表中数字排序的

注意:其中的类似 append,insert, remove 等方法会修改列表本身,并且没有返回值(严格的说是返回None)。

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