本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Basic/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接:https://pan.baidu.com/s/1x2Ynh_VibPY2u-HWTaJo8w?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Basic
——————————————————
1.列表的概念:
列表(list)还包含0个或者多个对象引用的有序序列,没有长度限制,内部元素类型可以不同。其长度和内容都是可变的,即可对列表中的数据进行增删改操作,使用灵活,使用中括号([])表示。
1# 列表(list)还包含0个或者多个对象引用的有序序列,没有长度限制,内部元素类型可以不同。
2>>> ls = [1 , 2.34 , 'a' , [54 , "python"] , (22 , 55) ]
3>>> ls
4[1, 2.34, 'a', [54, 'python'], (22, 55)]
列表属于序列类型,因此也支持成员关系符(in)、长度计算函数(len())、索引切片([n:m])等。可以同时使用正向索引和反向索引。
1# 列表属于序列类型,因此也支持成员关系符(in)、长度计算函数(len())、索引切片等([n:m])
2>>> 'a' in ls
3True
4>>> len(ls)
55
6>>> ls[2:]
7['a', [54, 'python'], (22, 55)]
8>>> ls[2:][1]
9[54, 'python']
10>>> ls[2:][1][1]
11'python'
12>>> ls[-2][-2]
1354
可以采用标准的比较操作符(<、<=、==、!=、>=、>)进行比较,列表的比较实际上是单个数据项的逐个比较。
如果列表1比列表2元素少,且所有元素都相等,则列表1小于列表2。
1# 列表的比较
2>>> ls1 = [1 , 'a' , '列表']
3>>> ls2 = [2 , '2' , '5']
4>>> ls1 > ls2
5False
可以通过list()函数将其他类型数据(字符串、元祖等)转化为列表。
1# 通过list()函数将其他类型数据(字符串、元祖等)转化为列表
2>>> list('Python编程语言') # 字符串
3['P', 'y', 't', 'h', 'o', 'n', '编', '程', '语', '言']
4>> list((1 , 2)) # 元祖
5[1, 2]
2.列表的操作:
2.1 向列表添加元素:
函数或方法 |
描述 |
ls.append(x) | 在列表ls最后增加一个元素x |
ls.insert(i,x) |
在列表ls的第i位置增加一个元素x 如果i超出列表长度,会在列表最后插入元素想,而不会报错 |
ls += lt或ls.extend(lt) | 将列表lt的元素增加到列表ls中 |
1>>> ls = ["R" , "SQL" , "python"]
2>>> ls
3["R" , "SQL" , "python"]
4>>> ls.append('JS')
5>>> ls
6['R', 'SQL', 'python', 'JS']
7>>> ls.insert(0,'HTML')
8>>> ls
9['R', 'SQL', 'python', 'JS','HTML' ]
10>>> ls.extend(['java' , 'C++'])
11>>> ls
12['R', 'SQL', 'python', 'JS','HTML', 'java', 'C++']
2.2 修改列表项:
函数或方法 |
描述 |
ls[i]=x |
替换列表ls的第i数据项为x |
ls[i:j]=lt |
用列表lt替换列表ls中第i到第j项(不包括j,下同)数据 |
ls[i:j:k]=lt |
用列表lt替换列表ls第i到第j项以k为步数的数据 |
1>>> ls = ['R', 'SQL', 'python', 'JS', 'HTML', 'java', 'C++']
2>>> ls
3['R', 'SQL', 'python', 'JS', 'HTML', 'java', 'C++']
4>>> ls[1] = 'CSS'
5>>> ls
6['R', 'CSS', 'python', 'JS', 'HTML', 'java', 'C++']
7>>> ls[1:5] = ['Go' , 88]
8>>> ls
9['R', 'Go', 88, 'java', 'C++']
10>>> ls[1:4:2] = ['c' , 'd']
11>>> ls
12['R', 'c', 88, 'd', 'C++']
2.3 删除列表项:
函数或方法 |
描述 |
del ls[i:j:k] | 删除列表ls第i到第j项以k为步数的数据 |
ls.pop(i) |
将列表ls中的第i项元素取出并删除该元素 |
ls.remove(x) | 将列表ls中出现的第一个元素x删除 |
ls.clear() | 删除列表ls中的所有元素 |
del
是Python语句,并非列表方法,不能写作list.del()。del会解除名称与Python对象之间的关联,如果该对象无其他名称引用,则其所占用的内存也会被释放。
1>>> ls = ['R', 'SQL', 'python', 'JS', 'HTML', 'java', 'C++']
2>>> ls
3['R', 'SQL', 'python', 'JS', 'HTML', 'java', 'C++']
4>>> del ls[1:4:2]
5>>> ls
6['R', 'python', 'HTML', 'java', 'C++']
7>>> ls.pop(2)
8'HTML'
9>>> ls
10['R', 'python', 'java', 'C++']
11>>> ls.remove('java')
12>>> ls
13['R', 'python', 'C++']
14>>> ls.clear()
15>>> ls
16[]
2.4 对列表项排序:
函数或方法 |
描述 |
ls.reverse() |
将列表ls中的元素反转 |
ls.sort() | 对列表ls中的元素进行排序,默认为升序排列,通过设置参数reverse=True设置为降序排列。 |
1>>> ls = ['R', 'SQL', 'python', 'JS', 'HTML', 'java', 'C++']
2>>> ls
3['R', 'SQL', 'python', 'JS', 'HTML', 'java', 'C++']
4>>> ls.sort(reverse=True)
5>>> ls
6['python', 'java', 'SQL', 'R', 'JS', 'HTML', 'C++']
7>>> ls.reverse()
8>>> ls
9['C++', 'HTML', 'JS', 'R', 'SQL', 'java', 'python']
2.5 复制列表:
函数或方法 |
描述 |
ls.copy() | 生成一个新的列表,复制ls中的所有元素(浅拷贝) |
当列表中的元素都是不可变值时,copy()函数效果很好。
1# 列表中的元素都是不可变值时
2>>> ls = ['R', 'SQL', 'python']
3>>> ls
4['R', 'SQL', 'python']
5>>> ls_2 = ls.copy()
6>>> ls_2
7['R', 'SQL', 'python']
8>>> ls[1] = 'JS'
9>>> ls
10['R', 'JS', 'python']
11>>> ls_2
12['R', 'SQL', 'python']
可是当列表中的元素有可变值时,会出现以下情况(修改原来列表中的值,副本也会随之更改):
1# 列表中的元素都是不可变值时
2>>> ls = ['R', 'SQL', ['python' , 'CSS']]
3>>> ls
4['R', 'SQL', ['python' , 'CSS']]
5>>> ls_2 = ls.copy()
6>>> ls_2
7['R', 'SQL', ['python' , 'CSS']]
8>>> ls[2][1] = 'JS'
9>>> ls
10['R', 'SQL', ['python', 'JS']]
11>>> ls_2
12['R', 'SQL', ['python', 'JS']]
为了解决上述问题,需要使用python内置copy()模块中的deepcopy()函数。
1# 当列表中的元素有可变值时,需要使用deepcopy()函数
2>>> import copy # 首先需要使用import关键字,引入内置copy模块
3>>> ls = ['R', 'SQL', ['python' , 'CSS']]
4>>> ls
5['R', 'SQL', ['python' , 'CSS']]
6>>> ls_2 = copy.deepcopy(ls)
7>>> ls_2
8['R', 'SQL', ['python' , 'CSS']]
9>>> ls[2][1] = 'JS'
10>>> ls
11['R', 'SQL', ['python', 'JS']]
12>>> ls_2
13['R', 'SQL', ['python' , 'CSS']]
这里就引出了浅拷贝和深拷贝的区别:
-
浅拷贝只是将原对象在内存中引用地址拷贝过来了,让新的对象指向这个地址。所以如果你这时候修改原来对象的值,副本也会随之更改。
-
而深拷贝是将这个对象的所有内容遍历拷贝过来了,相当于跟原来没关系了。所以如果你这时候修改原来对象的值跟他没关系了,副本不会随之更改。
另外,也可以通过*复制列表。
函数或方法 |
描述 |
ls *= n |
更新列表ls,其元素重复n次 |
1>>> ls = ['R', 'SQL', 'python']
2>>> ls
3['R', 'SQL', 'python']
4>>> ls *= 2
5>>> ls
6['R', 'SQL', 'python', 'R', 'SQL', 'python']
2.6 查找列表项:
函数或方法 |
描述 |
ls.index(x[, start[, end]]) | 从列表中获取值x第一个匹配项的索引位置。 |
1>>> ls = ['R', 'SQL', 'python', 'python']
2>>> ls
3['R', 'SQL', 'python', 'python']
4>>> ls.index('python')
52
2.7 统计列表中某个值出现的次数:
函数或方法 |
描述 |
ls.count(x) |
统计元素x在列表ls中出现的次数 |
1>>> ls = ['R', 'SQL', 'python', 'python']
2>>> ls
3['R', 'SQL', 'python', 'python']
4>>> ls.count('python')
52
本篇文章来源于微信公众号: 码农设计师