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]

 

posted @ 2022-07-17 16:32  南城古  阅读(329)  评论(0编辑  收藏  举报