Python 序列(Sequence)是指按特定顺序依次排列的一组数据,它们可以占用一块连续的内存,也可以分散到多块内存中。Python 中的序列类型包括列表(list)、元组(tuple)、字典(dict)和集合(set)。
列表(list)和元组(tuple)比较相似,它们都按顺序保存元素,所有的元素占用一块连续的内存,每个元素都有自己的索引,因此列表和元组的元素都可以通过索引(index)来访问。它们的区别在于:列表是可以修改的,而元组是不可修改的。
字典(dict)和集合(set)存储的数据都是无序的,每份元素占用不同的内存,其中字典元素以 key-value
的形式保存。
所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。
序列索引
列表中的每一个元素都有属于自己隐形的编号。 同个这个编号可以访问到编号所对应的元素。 从左向右索引从0开始。 从右向左索引从-1开始
a = [1, 2, 'python', 'python3.7', True, False]
print(a[0])
print(a[5])
print(a[-1])
print(a[5] == a[-1])
1
False
False
True
定义列表
列表中可以包含python中的任何数据类型 有两种方法可以创建列表
使用‘[]’直接创建并一般将其赋值给一个变量
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
[1, 2, 'python', 'python3.7', True, False]
还可以创建空列表
b = []
print(b)
[]
使用list()函数创建列表
# 将字符串转换成列表
a = list('python3.7')
print(a)
print('-------------')
# 将元组转换成列表
b = list((1, 2, 3, 4, 5))
print(b)
print('--------------')
# 将字典转换成列表
c = list({"name": "小张", 1: 100})
print(c)
print('--------------')
# 将区间转换成列表
d = [list(range(0, 10))]
print(d)
print('---------------')
# 创建空列表
print(list())
['p', 'y', 't', 'h', 'o', 'n', '3', '.', '7']
-------------
[1, 2, 3, 4, 5]
--------------
['name', 1]
--------------
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
---------------
[]
列表元素的访问
可以通过索引访问列表中的元素。 但是不能超过列表的最大索引
a = [1, 2, 'python', 'python3.7', True, False]
print(a[3])
print('-----------')
print(a[4])
print('-----------')
print(a[10])
python3.7
-----------
True
-----------
Traceback (most recent call last):
File "/Users/apple/Desktop/python3/python20.py", line 6, in
print(a[10])
IndexError: list index out of range
序列切片
该操作可以访问一定范围内的列表。返回一个新的列表
a = [1, 2, 'python', 'python3.7', True, False]
"""
sname:表示序列的名称;
start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;
end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。
"""
print(a[1:])
print(a[:])
print(a[4])
print(a[2::2])
print(a[::2])
print(a[::])
[2, 'python', 'python3.7', True, False]
[1, 2, 'python', 'python3.7', True, False]
True
['python', True]
[1, 'python', True]
[1, 2, 'python', 'python3.7', True, False]
修改单个元素
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a[1] = 'java'
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 'java', 'python', 'python3.7', True, False]
修改一组元素 Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操作既可以为列表添加元素,也可以为列表删除元素。
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a[1: 4] = [100, 2000, 2000, 300, 'java']
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 100, 2000, 2000, 300, 'java', True, False]
如果对空切片(slice)赋值,就相当于插入一组新的元素:
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a[4: 4] = [100, 2000, 2000, 300, 'java']
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python', 'python3.7', 100, 2000, 2000, 300, 'java', True, False]
使用切片语法赋值时,Python 不支持单个值,例如下面的写法就是错误的:
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a[4: 4] = 100
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
Traceback (most recent call last):
File "/Users/apple/Desktop/python3/python20.py", line 5, in
a[4: 4] = 100
TypeError: can only assign an iterable
但是如果使用字符串赋值,Python 会自动把字符串转换成序列,其中的每个字符都是一个元素,请看下面的代码:
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a[4: 4] = "java"
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python', 'python3.7', 'j', 'a', 'v', 'a', True, False]
使用切片语法时也可以指定步长(step 参数),但这个时候就要求所赋值的新元素的个数与原有元素的个数相同,
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a[1:5:2] = [100, 200]
print(a)
print('--------')
a[1:5:2] = '100'
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 100, 'python', 200, True, False]
--------
Traceback (most recent call last):
File "/Users/apple/Desktop/python3/python20.py", line 9, in
a[1:5:2] = '100'
ValueError: attempt to assign sequence of size 3 to extended slice of size 2
序列相加
python支持两种相同类型的序列使用“+”运算符进行相加。 但是不会去除重复的元素。 类型相同指的是要不“+”都是列表。要不都是元组或者其他相同的数据类型
a = [1, 2, 'python', 'python3.7', True, False]
b = ['今天会下雨', 1, 'a']
print(a + b)
[1, 2, 'python', 'python3.7', True, False, '今天会下雨', 1, 'a']
用“*”可以生成多个相同元素的列表
a = [1, 2, 'python', 'python3.7', True, False]
print(a * 5)
[1, 2, 'python', 'python3.7', True, False, 1, 2, 'python', 'python3.7', True, False, 1, 2, 'python', 'python3.7', True, False, 1, 2, 'python', 'python3.7', True, False, 1, 2, 'python', 'python3.7', True, False]
检查元素是否包含在序列中
in关键字可以检查元素是否在列表中。存在返回True不存在返回False
a = [1, 2, 'python', 'python3.7', True, False]
print(1 in a)
print(3 in a)
True
False
删除列表
del 关键字可以删除列表。 在实际开发中不经常用到因为python的垃圾回收机制会自动销毁列表
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
del a
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
Traceback (most recent call last):
File "/Users/apple/Desktop/python3/python20.py", line 6, in
print(a)
NameError: name 'a' is not defined
del:根据索引值删除元素
del 可以删除列表中的单个元素 参数表示要删除元素的索引值
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
del a[1]
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 'python', 'python3.7', True, False]
del 也可以删除中间一段连续的元素,其中,第一个表示起始索引,第二个表示结束索引。del 会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素。
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
del a[1: 4]
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, True, False]
pop():根据索引值删除元素 参数表示索引值。如果不写 index 参数,默认会删除列表中的最后一个元素
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a.pop(1)
print(a)
print('--------')
a.pop()
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 'python', 'python3.7', True, False]
--------
[1, 'python', 'python3.7', True]
remove():根据元素值进行删除 要保证要删除的元素存在列表中
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a.remove("python")
print(a)
print('--------')
a.remove('java')
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python3.7', True, False]
--------
Traceback (most recent call last):
File "/Users/apple/Desktop/python3/python20.py", line 9, in
a.remove('java')
ValueError: list.remove(x): x not in list
clear():删除列表所有元素
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
a.clear()
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[]
append()添加元素
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
# 添加元素
a.append('我喜欢学习')
print(a)
print('--------')
# 添加元组
a.append((1, 2, 3, 4, 5, 6, 7, 'python3'))
print(a)
print('---------')
# 添加列表
a.append(['哈哈哈', 'Jack'])
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python', 'python3.7', True, False, '我喜欢学习']
--------
[1, 2, 'python', 'python3.7', True, False, '我喜欢学习', (1, 2, 3, 4, 5, 6, 7, 'python3')]
---------
[1, 2, 'python', 'python3.7', True, False, '我喜欢学习', (1, 2, 3, 4, 5, 6, 7, 'python3'), ['哈哈哈', 'Jack']]
extend()方法添加元素
与append()的不同之处在于不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
# 添加元素
a.extend('java')
print(a)
print('--------')
# 追加元组,元祖被拆分成多个元素
a.extend(('java', 'php', 'js'))
print(a)
print('--------')
# 追加列表,列表也被拆分成多个元素
a.extend(['mac', 'phone'])
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'python', 'python3.7', True, False, 'j', 'a', 'v', 'a']
--------
[1, 2, 'python', 'python3.7', True, False, 'j', 'a', 'v', 'a', 'java', 'php', 'js']
--------
[1, 2, 'python', 'python3.7', True, False, 'j', 'a', 'v', 'a', 'java', 'php', 'js', 'mac', 'phone']
insert()给列表指定的位置添加元素
该方法可以携带两个参数。第一个参数表示插入的位置。第二个参数表示要插入的元素。 在插入元组等时和append方法一样会将其视为一个整体
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
# 插入元素
a.insert(2, 'java')
print(a)
print('--------')
# 插入元组,整个元祖被当成一个元素
a.insert(4, (1, 2, 4, 'c'))
print(a)
print('---------')
# 插入列表,整个列表被当成一个元素
a.insert(1,[100, True, 'es6'])
print(a)
print('---------')
# 插入字符串,整个字符串被当成一个元素
a.insert(6, 'hello ')
print(a)
[1, 2, 'python', 'python3.7', True, False]
-------
[1, 2, 'java', 'python', 'python3.7', True, False]
--------
[1, 2, 'java', 'python', (1, 2, 4, 'c'), 'python3.7', True, False]
---------
[1, [100, True, 'es6'], 2, 'java', 'python', (1, 2, 4, 'c'), 'python3.7', True, False]
---------
[1, [100, True, 'es6'], 2, 'java', 'python', (1, 2, 4, 'c'), 'hello ', 'python3.7', True, False]
index() 方法用于检查元素在列表中出现的位置。 如果存在则返回元素的位置。 否则会报错。该方法有三个参数。 第一个参数表示要查找的元素。第二个元素表示开始的位置。 第三个表示结束的位置。
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
# #检索列表中的所有元素
print(a.index("python"))
print('--------')
# 检索1-4之间的元素
print(a.index(2, 1, 4))
print("---------")
# 检查3以后所有的元素
print(a.index(False, 3))
print('----------')
# 检查不存在的元素
print(a.index('java'))
[1, 2, 'python', 'python3.7', True, False]
-------
2
--------
1
---------
5
----------
Traceback (most recent call last):
File "/Users/apple/Desktop/python3/python20.py", line 18, in
print(a.index('java'))
ValueError: 'java' is not in list
count()方法返回元素在列表中出现的次数。如果返回0则表示元素不存在。 该方法因此也被用检查列表中是否存在某个元素
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
print(a.count(2))
print('---------')
print(a.count("java"))
[1, 2, 'python', 'python3.7', True, False]
-------
1
---------
0
len()计算序列的长度,即返回序列中包含多少个元素。
a = [1, 2, 'python', 'python3.7', True, False]
print(a)
print('-------')
print(len(a))
[1, 2, 'python', 'python3.7', True, False]
-------
6
max()求最大值
a = [1, 2, 100, 300, 4000]
print(a)
print('-------')
print(max(a))
4000
min()求最小值
a = [1, 2, 100, 300, 4000]
print(a)
print('-------')
print(min(a))
1
list()将序列转为列表
str = 'java'
print(list(str))
['j', 'a', 'v', 'a']
sun()列表求和
a = [1, 2, 100, 300, 4000]
print(a)
print('-------')
print(sum(a))
[1, 2, 100, 300, 4000]
-------
4403
sorted()排序
a = ["a", "java", "python", 'f', 'z']
print(a)
print('-------')
print(sorted(a))
['a', 'java', 'python', 'f', 'z']
-------
['a', 'f', 'java', 'python', 'z']
其他方法归纳
len() | 计算序列的长度,即返回序列中包含多少个元素。 |
max() | 找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。 |
min() | 找出序列中的最小元素。 |
list() | 将序列转换为列表。 |
str() | 将序列转换为字符串。 |
sum() | 计算元素和。 |
sorted() | 对元素进行排序。 |
reversed() | 反向序列中的元素。 |
enumerate() | 将序列组合为一个索引序列,多用在 for 循环中 |