Python 第五天 列表(list)详解
1.什么是序列,序列详解:
序列:指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(索引)访问他们。
序列类型:字符串,列表,元组,集合和字典
序列索引:每个元素都有属于自己的编号(索引)。从起始元素开始,索引值从0开始递增。
此外,索引还支持是负数,从右往左计数,也就是从最后一个元素开始计数,索引值-1开始。
示例:
1 str = "你好,这个世界"
2 print(str[0], "==",str[-7])
3 print(str[6], "==",str[-1])
结果:
你 == 你
界 == 界
序列切片:
切片操作可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列。
语法格式:
sname[start:end:step]
解释:
sname:序列的名称;
start:切片的开始索引位置(包含该位置),此参数也可以不指定,默认为0,也就是序列的开头;
end:切片的结束索引位置(不包含该位置),如果不指定,则默认序列的长度。
step:在切片的过程中,隔几个存储位置(包含当前位置)取一次元素,比如:如果step的值大于1,则进行切片序列元素时,会“跳跃式”的取元素。如果省略设置step的值,则最后一个冒号就可以省略。
示例:
1 str = "你好,这个世界"
2 # 取索引区间为[0,2]之间(不包括索引2处的字符)的字符串
3 print(str[:2])
4 # 隔1个字符取一个字符,区间是整个字符串
5 print(str[::2])
6 # 取整个字符串,此时 [] 中只需一个冒号即可
7 print(str[:])
结果:
你好
你,个界
你好,这个世界
序列相加:
Python中支持两种类型相同的序列使用 “+” 运算符做相加操作,它会将两个序列进行连接,但不会去除重复的元素。
注意:这里说的 类型相同 ,指定是 “+” 运算符的两侧序列要么都是列表类型,要么都是元组类型,要么都是字符串。
示例:
1 str = "www.baidu.com"
2 print("百度"+"的网址是:"+str)
结果:
百度的网址是:www.baidu.com
序列相乘:
使用数字n乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果。
示例:
1 str = "hello word,\t"
2 print(str*3)
结果:
hello word, hello word, hello word,
列表类型在进行乘法运算时,还可以实现初始化指定长度列表的功能。
例如,创建一个长度为5的列表,列表中的每个元素都是None,表示什么都没有
1 # 列表的创建用 []
2 list = [None]*5
3 print(list)
结果:
[None, None, None, None, None]
检查元素是否包含在序列中:
可以使用 in 关键字检查某元素是否为序列的成员,其语法格式为:
value in sequence
value 表示要检查的元素,sequence 表示指定的序列。
例如:
1 # 检查字符 'b' 是否包含在字符串"www.baidu.com"中
2 str = "www.baidu.com"
3 print('b' in str)
结果:
True
not in 关键字的作用于 in 正好相反,用来检查某个元素是否不包含在指定的序列中。
示例:
1 str = "www.baidu.com"
2 print('b' not in str)
结果:
False
和序列相关的内置函数:
示例:
1 str = "www.baidu.com"
2 # 找出最大的字符
3 print(max(str))
4 # 找出最小的字符
5 print(min(str))
6 # 对字符串中的元素进行排序
7 print(sorted(str))
结果:
w
.
['.', '.', 'a', 'b', 'c', 'd', 'i', 'm', 'o', 'u', 'w', 'w', 'w']
2.list列表详解:
Python中没有数组。从形式上看,列表会将所有元素都放在一对中括号 [] 里面,相邻元素之间用逗号分隔。
具体格式:
[element1,element2,element3....,elementn]
element1~elementn表示列表中的元素,个数没有限制,只要是Python支持的数据类型就可以。
创建列表:
1)直接 [] 直接创建列表:
使用 [] 创建列表后,一般使用 = 将它赋值给某个变量,具体格式如下:
list_name = [element1,element2,element3,...,elementn]
示例:
1 str = ["百度中文", "www.baidu.com"]
2 code = ["java", "python", "c++"]
3 int1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
列表中元素可以有多个,也可以一个都没有。
2)使用list()函数创建列表:
内置函数list(),使用它可以将其他数据类型转换为列表类型。
示例:
1 # 将元组转换成列表
2 tuple1 = ('Python', 'java', 'c++')
3 list2 = list(tuple1)
4 print(list2)
5
6 # 将字典转换成列表
7 dict1 = {'a':15, 'b':40, 'c':80}
8 list3 = list(dict1)
9
10 # 将区间转换成列表
11 range1 = range(1, 6)
12 list4 = list(range1)
13 print(list4)
14
15 # 创建空列表
16 print(list())
结果:
['h', 'e', 'l', 'l', 'o']
['Python', 'java', 'c++']
[1, 2, 3, 4, 5]
[]
访问列表元素:
列表是序列的一种,可以使用索引(index)访问列表中的某个元素(得到的是一个元素的值),也可以使用切片访问列表中的一组元素(得到的是一个新的子列表)
格式:
list_name[i]
list_name 表示列表名字,i 表示索引值。索引可以是正数,也可以是负数。
使用切片访问列表元素的格式为:
list_name[start:end:step]
list_name 表示列表名字,start 表示起始索引,end 表示结束索引,step 表示步长。
示例:
1 url = list("http://c.biancheng.net/shell/")
2 #使用索引访问列表中的某个元素
3 print(url[3]) #使用正数索引
4 print(url[-4]) #使用负数索引
5 #使用切片访问列表中的一组元素
6 print(url[9: 18]) #使用正数切片
7 print(url[9: 18: 3]) #指定步长
8 print(url[-6: -1]) #使用负数切片
结果:
p
e
['b', 'i', 'a', 'n', 'c', 'h', 'e', 'n', 'g']
['b', 'n', 'e']
['s', 'h', 'e', 'l', 'l']
删除列表:
对于已经创建的列表,如果不再使用,可以使用 del 关键字将其删除。
实际开发中并不经常使用 del 来删除列表,因为 Python 自带的垃圾回收机制会自动销毁无用的列表,即使开发者不手动删除,Python 也会自动将其回收。
格式:
del list_name
列表添加元素的三种方法:
(1)append()方法添加元素:
用于在列表的末尾追加,语法格式如下:
list_name.append(obj)
obj 表示添加到列表末尾的数据,可以是单个元素,也可以是列表,元组等。
示例:
1 a = ['java', 'Python', 'c++']
2 # 追加元素
3 a.append('c#')
4 print(a)
5
6 # 追加元组,整个元组当成一个元素
7 b = ('php', 'go', 'javascript')
8 a.append(b)
9 print(a)
10
11 # 追加列表,整个列表也可以当成一个元素
12 c = ['Mysql', 'oracle']
13 a.append(c)
14 print(a)
结果:
['java', 'Python', 'c++', 'c#']
['java', 'Python', 'c++', 'c#', ('php', 'go', 'javascript')]
['java', 'Python', 'c++', 'c#', ('php', 'go', 'javascript'), ['Mysql', 'oracle']]
当使用 append() 方法传递列表或者元组时,会将它们视作一个整体,作为一个元素追加到列表中。
(2)extend()方法添加元素:
extend() 的不同之处在于不会吧列表或者元组当作一个整体,而是把里面的元素逐个添加到列表中。
格式:
list_anme.extend(obj)
注意:obj表示添加到尾部的数据,可以是单个元素,也可以是列表,元组等,但不能是单个的数字。
示例:
1 a = ['java', 'Python', 'c++']
2 # 追加元素
3 a.extend('c#')
4 print(a)
5
6 # 追加元组,整个元组当成一个元素
7 b = ('php', 'go', 'javascript')
8 a.extend(b)
9 print(a)
10
11 # 追加列表,整个列表也可以当成一个元素
12 c = ['Mysql', 'oracle']
13 a.extend(c)
14 print(a)
结果:
['java', 'Python', 'c++', 'c', '#']
['java', 'Python', 'c++', 'c', '#', 'php', 'go', 'javascript']
['java', 'Python', 'c++', 'c', '#', 'php', 'go', 'javascript', 'Mysql', 'oracle']
(3)insert() 方法插入元素:
insert()方法不同于之前的两种,insert() 方法可以在列表的某个位置插入元素。
格式:
list_anme.insert(index, obj)
index 表示指定位置的索引值。insert() 会将 obj 插入到last_name列表地 index 个元素的位置。
当插入列表或者元组是,insert() 会将它们看作一个整体,作为一个元素插入到列表中。
示例:
1 a = ['java', 'Python', 'c++']
2 # 插入元素
3 a.insert(1, 'c#')
4 print(a)
5
6 # 插入元组,整个元组当成一个元素
7 b = ('php', 'go', 'javascript')
8 a.insert(2, b)
9 print(a)
10
11 # 插入列表,整个列表也可以当成一个元素
12 c = ['Mysql', 'oracle']
13 a.insert(3, c)
14 print(a)
15
16 # 插入字符串,整个字符串被当成一个元素
17 a.insert(0, "Hello Word")
18 print(a)
结果:
['java', 'c#', 'Python', 'c++']
['java', 'c#', ('php', 'go', 'javascript'), 'Python', 'c++']
['java', 'c#', ('php', 'go', 'javascript'), ['Mysql', 'oracle'], 'Python', 'c++']
['Hello Word', 'java', 'c#', ('php', 'go', 'javascript'), ['Mysql', 'oracle'], 'Python', 'c++']
list列表删除元素(4种方法):
列表中删除元素主要分一下3种场景:
1.根据元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法;
2.根据元素本身的值进行删除,使用列表(list类型)提供的 remove() 方法;
3.将列表中所有元素全部删除,使用列表(list类型)提供的 clear() 方法;
del:根据索引值删除元素:
语法格式:
del list_name[index]
listname 表示列表名称,index 表示元素的索引值。
也可以删除中间一段连续的元素,格式为:
del list_name[start:end]
start 表示起始索引,end 表示结束索引。del 会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素。
示例:
1 b = ['java', 'python', 'c++', 'php', 'html', 'go']
2 # 使用正数索引
3 del b[2]
4 print(b)
5 # 使用负数索引
6 del b[-2]
7 print(b)
结果:
1 ['java', 'python', 'php', 'html', 'go']
2 ['java', 'python', 'php', 'go']
使用 del 删除一段连续的元素:
1 b = ['java', 'python', 'c++', 'php', 'html', 'go']
2 del b[1: 4]
3 print(b)
4
5 b.extend(["mysql", "oracle", "c#"])
6 del b[-5:-2]
7 print(b)
结果:
['java', 'html', 'go']
['java', 'oracle', 'c#']
pop():根据索引值删除元素:
格式:
list_name.pop(index)
示例:
1 nums = [40, 56, 36, 3, 56, 150, 5]
2 nums.pop(3)
3 print(nums)
4 nums.pop()
5 print(nums)
结果:
[40, 56, 36, 56, 150, 5]
[40, 56, 36, 56, 150]
remove():根据元素进行删除
remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的,否则会引发 ValueError 错误。
示例:
1 nums = [40, 56, 36, 3, 56, 150, 5]
2 # 第一次删除56
3 nums.remove(56)
4 print(nums)
5 # 第二次删除56
6 nums.remove(56)
7 print(nums)
8 # 删除160
9 nums.remove(160)
10 print(nums)
结果:
Traceback (most recent call last):
File "D:\pythonProject\one day\test.py", line 442, in <module>
nums.remove(160)
ValueError: list.remove(x): x not in list
[40, 36, 3, 56, 150, 5]
[40, 36, 3, 150, 5]
因为元素160不存在,所以导致报错。
clear():删除列表所有元素
示例:
1 e = list("Hello,i am a good man")
2 e.clear()
3 print(e)
结果:
[]
列表修改元素:
修改单个元素:
示例:
1 nums = [50, 66, 34, 5.5, 48, 9]
2 nums[2] = -45 # 使用正数索引
3 nums[-3] = 55 # 使用负数索引
4 print(nums)
结果:
[50, 66, -45, 55, 48, 9]
修改一组元素:
Python支持通过切片语法给一组元素赋值。但是不指定步长(step参数),Python就不要求新赋值的元素于原来的元素个数相同;意味着,该操作即可以为列表添加元素,也可以删除元素。
示例:
1 nums = [40, 38, 98, 3, 46, 150, 9]
2 # 修改第1~4个元素的值(不包括第4个元素)
3 nums[1: 4] = [45.5, 20, 89, -33]
4 print(nums)
结果:
[40, 45.5, 20, 89, -33, 46, 150, 9]
如果对空切片(slice)赋值,就相当于插入一组新的元素;
1 nums = [40, 38, 98, 3, 46, 150, 9]
2 # 在第4个位置插入元素
3 nums[4: 4] = [-77, -54, 666]
4 print(nums)
结果:
[40, 38, 98, 3, -77, -54, 666, 46, 150, 9]
注意:使用切片语法赋值时,Python不支持单个值,例如:
nums[4: 4] = -89
如果使用字符串赋值,Python会自动把字符串转换成序列,其中每个字符都是一个元素。
示例:
1 s = list("Hello")
2 s[2: 4] = "gsj"
3 print(s)
结果:
1 ['H', 'e', 'g', 's', 'j', 'o']
使用切片语法时指定步长(step参数),但要求赋值的新元素的个数于原有元素的个数相同。
示例:
1 nums = [40, 38, 98, 3, 46, 150, 9]
2 # 步长为2.为第1、3、5个元素赋值
3 nums[1: 6: 2] = [3.14, -85, 46.3]
4 print(nums)
结果:
[40, 3.14, 98, -85, 46, 46.3, 9]