python入门之玩转列表 客人名单的变化_玩转python列表

介绍

列表(list)是python的一种容器型数据类型。所谓容器型指的是列表可以将许多变量有序组织在一起,构成一个整体。列表可以存放任意数据类型的变量,包括列表本身。

python中的列表和C语言中的数组有相同的地方(存放数据,按索引访问),但是列表和数组是有本质区别的。列表可以存不同的数据类型。

a = ["hello", 123, [1,2,3], "world"]

列表的长度可以变化,即可以随时增加元素和删除元素。

a.append("haha")# 列表尾部增加一个新元素

a.pop()# 删除列表最后一个元素

定义列表

列表的定义非常简单,直接使用中括号将多个元素括起来,每个元素用逗号隔开。

# 方式一(推荐)

a = [1,2,3,4] # 用中括号内个元素用逗号隔开

b = []# 空列表

# 方拾二(类型转换)

c = list([1,2,3,4,5])

d = list('abcde')

# d = ['a', 'b', 'c', 'd', 'e']

访问列表

通过索引值查看列表元素

# 列表中的元素是有序的,从左往右,第一个元素的索引下标是0,第二个元素下标是1,依次类推。

# 当索引值为负数,表示访问列表中倒数第几个元素,如a[-1]表示列表a中倒数第一个元素

>>> a = [5,3,1,7,2]

>>> a[2]

1

>>> a[-1]

2

通过索引值修改列表元素

>>> a = [5,3,1,7,2]

>>> a[2] = 10# a = [5,3,10,7,2]

# 如果索引值超多列表长度,则报错

>>> a = [5,3,1,7,2]

>>> a[10] = 21# 列表a没有索引10

Traceback (most recent call last):

File "", line 1, in

a[10] = 21

IndexError: list assignment index out of range

删除列表或列表元素 del

# del 本质是解除变量对象和内存地址的绑定关系

l1 = [1,2,3,4]

del l1[1]

del l1

查看列表长度len()

>>> a = [5,3,1,7,2]

>>> len(a)

5

列表的加法和乘法 都是列表的扩展

>>> a = [1]

>>> b = [2]

>>> a+b

[1, 2]

>>> a*3

[1, 1, 1]

# 值得注意的是 使用 * 是浅拷贝

>>> a = [1, [11, 22]]

>>> b = a*3

>>> b

[1, [11, 22], 1, [11, 22], 1, [11, 22]]

>>> a[1][0] = 110

>>> b

[1, [110, 22], 1, [110, 22], 1, [110, 22]]

切片

通过索引,每次只能访问列表中的一个元素,如果需要同时获得列表中的多个元素可以通过切片的方式。

切片:从一个大的列表中copy出来一个子列表,原列表不变。

语法:a[start:end:step]

# 访问列表中下标0-2的元素

>>> a = [5,3,1,7,2]

>>> a[0:3]# 切片时 顾头不顾尾(下标0可以访问,3访问不到,只访问到2)

[5, 3, 1]

# 访问列表前几个元素可以省略冒号前面的0

>>> a[:3]

[5, 3, 1]

# 访问列表中间元素

>>> a[1:4]

[3, 1, 7]

# 访问列表后几个元素

>>> a[1:]

[3, 1, 7, 2]

# 访问列表所有元素

>>> a[:]

[5, 3, 1, 7, 2]

# 只访问列表中奇数为元素

>>> a[::2]

[5, 1, 2]

# 逆序访问列表所有元素

>>> a[::-1]

[2, 7, 1, 3, 5]

# 访问列表倒数第一位元素 - 倒数第三位元素

>>> a[-3:]# 顾头不顾尾, 如果a[-3:-1],则打印 [1, 7]

[1, 7, 2]

# 切片总结:a[start:end:step]

# start :起始位置下标

# end :终止位置下标

# step :步长,正数表示从左往右;负数表示从右往左

# 总体原则:顾头不顾尾

内置方法

常用内置方法

append()尾部追加新元素

# 在列表尾部追加新元素

>>> a = ["hello", 123, [1,2,3], "world"]

>>> a.append("apple")

>>> a

['hello', 123, [1, 2, 3], 'world', 'apple']

insert(index, value)任意位置添加新元素

# 在列表的 index 位置处插入新元素 value,原index处及后面的元素按顺序往后移一位。

>>> a = [5,3,1,7,2]

>>> a.insert(1, 5)# 在下标1(即元素3)前插入元素5

>>> a

[5, 5, 3, 1, 7, 2]

# 当index为负数时,表示在倒数第index前插入元素

>>> a = [5,3,1,7,2]

>>> a.insert(-1, 10)

>>> a

[5, 3, 1, 7, 10, 2]

# 当index超过列表索引范围时,将在列表尾部或头部插入新元素

>>> a = [5,3,1,7,2]

>>> a.insert(110, 9)

>>> a.insert(-100, 9)

>>> a

[9, 5, 3, 1, 7, 2, 9]

pop(index=-1) 通过索引删除元素并返回元素,默认删除最后一个,元素不存在会报错

# 默认删除列表最后一个元素,并返回

>>> a = [5,3,1,7,2]

>>> a.pop()

2

# 指定删除列表index处位置的元素,并返回

>>> a = [5,3,1,7,2]

>>> a.pop(2)

1

>>> a.pop(-1)

2

# 列表为空或者index超过索引范围,则报错

>>> a = []

>>> a.pop()

Traceback (most recent call last):

File "", line 1, in

a.pop()

IndexError: pop from empty list

>>> b = [3,5]

>>> b.pop(5)

Traceback (most recent call last):

File "", line 1, in

b.pop(5)

IndexError: pop index out of range

remove(value)通过值删除元素,没有返回值,元素不存在会报错

# 删除列表中第一个出现的value,如果value不存在则报错。

# 必须明确指定要删除的元素。

>>> a = [5,3,1,7,2]

>>> a.remove(3)# 删除元素3,此时 a = [5,1,7,1]

>>> a.remove(3)# 不存在元素3,报错

Traceback (most recent call last):

File "", line 1, in

a.remove(3)

ValueError: list.remove(x): x not in list

index(value, start=0, stop=9223372036854775807)找元素索引,找不到会报错

# 返回列表中指定value第一次出现的index,value不在搜索范围内则报错。指定stop时,遵循“顾头不顾尾”原则。

>>> a = ["jack", "cindy", "joy", "cindy","mac"]

>>> a.index("cindy")

1

>>> a.index("cindy", 2)

3

>>> a.index("cindy", 2, 3)

Traceback (most recent call last):

File "", line 1, in

a.index("cindy", 2,3)

ValueError: 'cindy' is not in list

其他内置方法

count(value)统计元素个数

# 返回value在列表中出现的次数,value不存在则返回0

>>> a = [5,3,1,3,7,2]

>>> a.count(3)

2

clear()清空列表

# 清空列表

>>> a = [5,3,1,7,2]

>>> a.clear()

>>> a

[]

copy()拷贝列表,浅拷贝

# 复制列表并返回

>>> a = [5,3,1,7,2]

>>> a.copy()

[5, 3, 1, 7, 2]

extend(iterable)扩展列表,将一个可迭代对象的元素并入列表中

# 扩展列表,将可迭代对象的每个元素放在列表中,可迭代对象包括:字符串、列表、字典等

>>> a = [5,3,1,7,2]

# 1 扩展列表

>>> a.extend([1,1,1])

>>> a

[5, 3, 1, 7, 2, 1, 1, 1]

# 2 扩展字符串

>>> a.extend("abcd")

>>> a

[5, 3, 1, 7, 2, 1, 1, 1, 'a', 'b', 'c', 'd']

reverse()列表反转,不是排序

# 将列表的元素反转,不会产生新列表

>>> a = [5,3,1,7,2]

>>> a.reverse()

>>> a

[2, 7, 1, 3, 5]

sort(key=None, reverse=False)列表排序,默认升序,可定制排序方式

# 将列表元素排序,默认升序。

>>> a = [5,3,1,7,2]

>>> a.sort()# a = [1, 2, 3, 5, 7]

# 参数key, 指定排序方式

>>> a = [(1,2),(3,5), (7,1)]

>>> a.sort(key=lambda x:x[1])# 按元素第二个元素排序

>>> a

[(7, 1), (1, 2), (3, 5)]

# 参数reverse=True,降序排列

>>> a = [5,3,1,7,2]

>>> a.sort(reverse=True)# a = [7, 5, 3, 2, 1]

注意

列表内置方法会报错的有:pop()、remove()、index()。

可以理解为列表操作具有保护机制,用户不可以随意删除列表中的元素。

且索引是唯一的,当一个元素不存在于列表中,index只能做报错处理。

切记:在遍历列表时删除列表元素,这样不稳妥

补充

切片修改元素

列表切片:本质是浅拷贝一份新的列表对象。

此外,列表切片还有一个不常用的功能:切片修改元素

#1 在列表位置1处插入新元素(1个或多个)

>>> l = [1,2,3,4]

>>> l[1:1] = [7]

>>> l

[1, 7, 2, 3, 4]

>>> l[1:1] = [8,8,8]

>>> l

[1, 8, 8, 8, 7, 2, 3, 4]

#2.1 修改列表元素

>>> l = [1,2,3,4]

>>> l[1:3] = [7]# 列表位置1、位置2处的元素用数字7覆盖

>>> l

[1, 7, 4]

#2.2

>>> l = [1,2,3,4]

>>> l[1:3] = [7,7,7]# 列表位置1、位置2处的元素用数字7、7、7覆盖

>>> l

[1, 7, 7, 7, 4]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值