第8天:Python list

2019/09/03

by 潮汐

Python 中的数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字、字符、甚至可以是其他数据结构 在 Python 中,最基本的数据结构是序列(列表和元组),序列中的每个元素都有一个序号(元素的具体位置),这个序号叫索引,索引下标从0开始,以此类推……

  • 列表俗称是 Python 中的苦力,列表可变(可以改变列表的内容)
  • 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
  • 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['baidu', 'google', 12, 34];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];

1. 列表函数

1.1 list 函数

如果对字符串赋值后想要改变字符串中的某个值,因为字符串不能像列表一样可更改,如果想改变这时候可以利用 list 函数,如下:

>>> ll=list('hello')
>>> ll
['h', 'e', 'l', 'l', 'o']
>>> ll[2]
'l'
>>> ll[2]='5'
>>> ll
['h', 'e', '5', 'l', 'o']

注意:list 函数适用于所有类型的序列,而不只是字符串

1.2 len 函数

len 函数返回列表中的元素个数

>>> list1 = ['baidu', 'google', 12, 23];
>>> len(list1)
4

1.3 max 函数

max 函数返回列表元素最大值

>>> list_num=[2,3,5,6,8,12]
>>> max(list_num)
12

1.4 min 函数

返回列表元素最小值

>>> list_num=[2,3,5,6,8,12]
>>> min(list_num)
2

2 列表方法

列表提供了几个详细的方法,这些方法用于检查或者修改列表中的内容

2.1 append

append 方法用于在列表的末尾追加新的内容

list_append = [1,2,3,4]
list_append.append(5)
list_append
[1, 2, 3, 4, 5]

2.2 count

count 方法用于统计某个元素在列表中出现的次数

num
[1, 2, 3, 4, 5, 5, 5, 5, 6]
# 统计num列表中5出现的次数
num.count(5)
4

# 统计字母a出现的次数
name=['a','a','abf','ark','nhk']

name.count('a')
2

2.3 extend

extend 方法表示追加内容,它可以在列表的末尾一次性追加另一个序列中的多个值,也就是用新列表扩展原有列表

a =[1,2,3]
b = [4,5,6]
# 将列表b追加在列表a后面
a.extend(b)
a
[1, 2, 3, 4, 5, 6]

此操作和列表的相加操作,但是追加操作改变原有列表,而相加不改变原有列表,例如:

a = [1,2,3]
b = [4,5,6]
a + b
[1, 2, 3, 4, 5, 6]
# 连接操作不改变原有列表
a
[1, 2, 3]

2.4 index

index 方法用于从列表中找出某个元素第一次匹配的位置的索引位置

content = ['where','who','lisi','cntent','who']
content.index('who')
1

==注意:== 以上方法中有两个位置有‘who’,但是只找出了第一次匹配的索引位置元素

2.5 insert

insert 方法用于像列表中插入对象

num = [1,2,5,6,7]
num.insert(2,3)
num
[1, 2, 3, 5, 6, 7]
num.insert(3,4)
num
[1, 2, 3, 4, 5, 6, 7]

2.6 pop

pop 方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值

x = [1,2,3]
x.pop()
3
x
[1, 2]
x.pop()
2
x
[1]

注意:pop 方法是唯一一个既能修改列表又能返回元素值的方法(除了None),pop 和 append 方法是 Python 中数据结构的出栈和入栈,如果追加(append)刚刚出栈(pop)的值,得到的还是原来的列表

x = [1,2,3]
x.append(x.pop())
x
[1, 2, 3]

2.7 remove

remove 方法用于移除列表中第一个匹配的元素

content
['where', 'who', 'lisi', 'cntent', 'who', 'who']
# 移除了第一个匹配的元素
content.remove('who')
content
['where', 'lisi', 'cntent', 'who', 'who']

2.8 reverse

reverse 方法是将列表中的元素进行反转操作

x
[1, 2, 3]
# 元素反向存储
x.reverse()
x
[3, 2, 1]

2.9 sort

sort 方法用于在原位置排序,‘原位置排序’意味着改变原来的列表而让列表中的元素有顺序排列

x = [2,3,5,6,1,4,7]
x.sort()
x
[1, 2, 3, 4, 5, 6, 7]

2.10 clear

clear 方法用于清空列表

>>> list1=['baidu', 'google', 12, 23]
>>> list1
['baidu', 'google', 12, 23]
# 清空列表内容
>>> list1.clear()
>>> list1
[]

2.11 copy

copy 方法是复制列表

>>> list1 = ['baidu', 'google', 12, 23];
>>> list1.copy()
['baidu', 'google', 12, 23]
>>> list2 = list1.copy()
>>> list2
['baidu', 'google', 12, 23]

3. 列表基本操作

列表可以使用所有适用于序列的标准操作,比如第7天所学的索引、分片、连接和相乘,更有趣的是,列表是可以修改的,也就是定义的列表内容可以根据需求更改,本节介绍一些改变列表的方法:如元素赋值、元素删除、分片赋值以及列表方法(但是请注意,并不是所有的列表方法都能真正改变列表)

3.1 改变列表:元素赋值

在列表中要给指定的元素赋值时,我们需要指定特定的索引标记来为列表中某个特定的,位置明确的元素赋值,比如 x[3]=5

# 
x=[1,2,3,4,5]
x
[1, 2, 3, 4, 5]
# 改变列表第四个元素的内容
x[3]=5
x
[1, 2, 3, 5, 5]

==注意:== 不能为一个位置不存在的元素赋值,如果列表长度为2,则不能为索引为10 的元素进行赋值,如果需要赋值则需要创建一个长度为11的列表。

3.2 删除列表元素

若要删除列表中的元素,直接利用del删除即可

# 定义长度为4的姓名列表
names=['zhangsan','lisi','wangwu','zhaoliu']
names
['zhangsan', 'lisi', 'wangwu', 'zhaoliu']

# 删除第三个元素
del names[2]

# 最后列表长度由4变为3
names
['zhangsan', 'lisi', 'zhaoliu']

del 语句还能用于删除其他元素,也可以用于变量的删除操作。

3.3 分片赋值

在 Python 中对序列或者列表的分片操作是一个很强大的特性,分片赋值会显得更加强大,例如:

# 定义一个list
name = list('Pyther')

# 改变 list 中的最后两个值
name[4:]='on'
name
['P', 'y', 't', 'h', 'o', 'n']

从上可知,程序可以一次为多个元素赋值,在分片赋值时,可以使用与原序列不等长的序列将分片替换,例如:

name_re = list('perl')
name_re
['p', 'e', 'r', 'l']
# 分片替换
name_re[1:] = list('ython')
name_re
['p', 'y', 't', 'h', 'o', 'n']

分片赋值还可以在不需要更改原有列表任何内容的情况下进行新元素插入

num = [1,4,5]
# 在第一个元素后插入新的元素
num[1:1]=[2,3]
num
[1, 2, 3, 4, 5]

同理也可以通过分片操作来删除列表中的元素,同样也支持负数分片操作

num
[1, 2, 3, 4, 5]
# 给第一个和迪桑元素之间分片赋值一个空序列,即删除元素
num[1:3] = []
num
[1, 4, 5]

# 负数分片操作
num[-1:-1] = [5,5,5]
num
[1, 2, 3, 4, 5, 5, 5, 5, 6]

总结

本节给大家介绍了 Python 数据结构之列表的操作与使用,对 Python 工程师使用列表提供了支撑。


一个有故事的程序员

(转载本站文章请注明作者和出处 纯洁的微笑-ityouknow

点击了解 :Java 技术人的网站

Show Disqus Comments

Post Directory