本文实例讲述了python数据类型之list列表。分享给大家供大家参考,具体如下:
list列表
1.概述:
通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班级有20个人,现在求班级的平均年龄。
若按照之前的方式来解决
age1 = 10
age2 = 12
...
age20 = 12
average = (age1 + age2 +...+age20)/20
在这里,很显然这种方法显得很麻烦,而python提供了一种解决方案,就是使用列表,可以随时添加和删除其中的元素。
本质:list列表的本质是一种有序的集合
2.创建列表
语法: 列表名 = [元素1,元素2,元素3…说明:列表中的选项被称为元素,跟string类似,下标也是从0开始计数
使用:创建列表
1
2
3
4
5
6
7
8
9
|
#创建空列表
list1 = []
#创建带有元素的列表
list2 = [ 10 , 20 , 30 , 10 ]
print (list2)
list3 = list ( range ( 1 , 10 ))
list4 = [i for i in range ( 10 )]
print (list3)
print (list4)
|
输出:
[10, 20, 30, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
在列表中元素的数据类型可以不同(灵活性)
1
2
|
list3 = [ 33 , "good" , true, 10.32 ]
print (list3)
|
输出:
[33, 'good', true, 10.32]
3.列表元素的访问
3.1 列表的取值
功能:访问list列表中元素值
语法:列表名[索引]
1
2
3
|
list4 = [ 22 , 33 , 12 , 32 , 45 ]
#下标从0开始,最大值为len(list4)-1
print (list4[ 0 ])
|
输出:
22
注意:当索引值大于len(list4)-1的时候,会出现以下错误:
1
2
|
print (list4[ 5 ])
indexerror: list index out of range
|
这个错误就是下标越界【下标超出了可表示的范围】
3.2 列表元素的替换
功能:更改列表元素的值
语法:列表名[下标] = 值
1
2
3
4
|
list4 = [ 22 , 33 , 12 , 32 , 45 ]
list4[ 0 ] = "hello"
print (list4[ 0 ])
print (list4)
|
输出:
hello
['hello', 33, 12, 32, 45]
4.列表操作
4.1 列表组合
语法: 列表3 = 列表1 + 列表2
1
2
3
4
|
list1 = [ 1 , 2 , 3 ]
list2 = [ 'hello' , 'yes' , 'no' ]
list3 = list1 + list2
print (list3)
|
输出:
[1, 2, 3, 'hello', 'yes', 'no']
4.2 列表重复
语法: 列表2 = 列表1 * n
1
2
3
|
list1 = [ 1 , 2 , 3 ]
list2 = list1 * 2
print (list2)
|
输出:
[1, 2, 3, 1, 2, 3]
4.3 判断元素是否在列表中
语法:元素 in 列表
若存在则返回true,否则返回false
1
2
|
list1 = [ 1 , 2 , 3 ]
print ( 1 in list1)
|
输出:
true
4.4 列表截取
语法:列表[start: end] 表示获取从开始下标到结束下标的所有元素[start, end)
1
2
3
4
|
list1 = [ 1 , 2 , 3 , 'hello' , 'yes' , 'no' ]
print (list1[ 2 : 4 ])
#若不指定start,则默认从0开始截取,截取到指定位置
#若不指定end,则从指定位置开始截取,截取到末尾结束
|
输出:
[3, 'hello']
4.5 二维列表
语法:列表 =[列表1,列表2,列表3,… ,列表n]
1
2
|
#创建二维列表,即列表中的元素还是列表
list1 = [[ 1 , 2 , 3 ],[ 2 , 3 , 4 ],[ 5 , 4 , 9 ]]
|
4.5 二维列表取值
语法:列表名[下标1][下标2]
注意:下标1代表第n个列表(下标从0开始),下标2代表第n个列表中的第n个元素
1
2
|
list1 = [[ 1 , 2 , 3 ],[ 2 , 3 , 4 ],[ 5 , 4 , 9 ]]
print (list1[ 0 ][ 0 ])
|
输出:
1
5.列表的方法
5.1 list.append(元素/列表)
功能:在列表中末尾添加新的元素【在原本的列表中追加元素】
注意:append()
中的值可以是列表也可以是普通元素
1
2
3
4
|
>>> list1 = [ 3 , 4 , 6 ]
>>> list1.append( 6 )
>>> print (list1)
[ 3 , 4 , 6 , 6 ]
|
5.2 list.extend(列表)
功能:在列表的末尾一次性追加另外一个列表中的多个值
注意:extend()
中的值只能是列表/元组[一个可迭代对象],不能是元素。
1
2
3
4
5
|
>>> list1 = [ 1 , 2 , 3 ]
>>> list2 = [ 3 , 4 , 5 ]
>>> list1.extend(list2)
>>> print (list1)
[ 1 , 2 , 3 , 3 , 4 , 5 ]
|
5.3 list.insert(下标值, 元素/列表)
功能:在下标处插入元素,不覆盖原本的数据,原数据向后顺延。
注意:插入的数据可以是元素也可以为列表。
1
2
3
4
5
6
7
|
>>> list1 = [ 1 , 2 , 3 ]
>>> list1.insert( 1 , 0 )
>>> print (list1)
[ 1 , 0 , 2 , 3 ]
>>> list1.insert( 1 ,[ 2 , 4 , 8 ])
>>> print (list1)
[ 1 , [ 2 , 4 , 8 ], 0 , 2 , 3 ]
|
5.4 list.pop(下标值)
功能:移除列表中指定下标处的元素(默认移除最后一个元素),并返回移除的数据。
1
2
3
4
5
6
7
8
9
|
>>> list1 = [ 1 , [ 2 , 4 , 8 ], 0 , 2 , 3 ]
>>> list1.pop()
3
>>> print (list1)
[ 1 , [ 2 , 4 , 8 ], 0 , 2 ]
>>> list1.pop( 2 )
0
>>> print (list1)
[ 1 , [ 2 , 4 , 8 ], 2 ]
|
5.5 list.remove(元素)
功能:移除列表中的某个元素第一个匹配结果
1
2
3
|
list1 = [ 1 , 2 , 3 , 2 , 4 ]
list1.remove( 2 )
print (list1)
|
输出:
[1, 3, 2, 4]
5.6 list.clear()
功能:清除列表中所有的数据
1
2
3
4
|
>>> list1 = [ 1 , 2 , 3 ]
>>> list1.clear()
>>> print (list1)
[]
|
5.7 list.index(元素[, start][, stop])
功能:从指定的范围的列表中找出某个值第一匹配的索引值
若不指定范围,则默认是整个列表。
1
2
3
4
5
6
7
|
>>> list1 = [ 1 , 2 , 3 ]
>>> list1.index( 2 )
1
>>> list1.index( 4 )
traceback (most recent call last):
file "<stdin>" , line 1 , in <module>
valueerror: 4 is not in list
|
注意:若在列表中找不到这个元素,则会报错。
5.8 list.count(元素)
功能:查看元素在列表中出现的次数
1
2
3
|
>>> list1 = [ 1 , 2 , 3 , 1 ]
>>> list1.count( 1 )
2
|
5.9 len(list)
功能: 获取元素个数
1
2
3
|
>>> list1 = [ 1 , 2 , 3 , 1 ]
>>> len (list1)
4
|
5.10 max(list)
语法:获取列表中的最大值,元素是不同的数据类型时不能使用
1
2
3
|
>>> list1 = [ 1 , 2 , 3 , 1 ]
>>> max (list1)
3
|
5.11 min(list)
语法:获取列表中的最小值,元素是不同的数据类型时不能使用
1
2
|
>>> list1 = [ 1 , 2 , 3 , 1 ]
>>> min (list1)
|
5.12 list.reverse()
语法: 列表倒叙,直接修改原列表,返回值为none。
1
2
3
4
|
>>> list1 = [ 1 , 2 , 3 , 1 ]
>>> list1.reverse()
>>> print (list1)
[ 1 , 3 , 2 , 1 ]
|
5.13 list.sort()
语法:列表排序 默认升序,元素是不同的数据类型时不能使用
1
2
3
4
|
>>> list1 = [ 1 , 2 , 3 , 1 ]
>>> list1.sort()
>>> print (list1)
[ 1 , 1 , 2 , 3 ]
|
1
2
3
4
|
#倒序
list1 = [ 1 , 2 , 3 , 2 , 4 ]
list1.sort(reverse = false)
print (list1)
|
输出:
[1, 2, 2, 3, 4]
5.14 浅拷贝
语法:
1
2
|
list1 = [ 1 , 2 , 3 ]
list2 = list1
|
1
2
3
4
5
6
7
8
|
>>> list1 = [ 1 , 2 , 3 , 1 ]
>>> list2 = list1
>>> print (list2)
[ 1 , 2 , 3 , 1 ]
>>> print ( id (list1))
4314476424
>>> print ( id (list2))
4314476424
|
1
2
3
4
|
list1 = [ 1 , 2 , 3 , 2 , 4 ]
list2 = list1
list2[ 0 ] = 0
print (list1)
|
输出:
[0, 2, 3, 2, 4]
注意:浅拷贝为引用拷贝,类似于快捷方式。
浅拷贝中一个变量发生改变,另一个也相应发生改变,
5.15 深拷贝
语法:
1
2
|
list1 = [ 1 , 2 , 3 ]
list2 = list1.copy()
|
方式2:
1
2
3
4
5
6
7
8
9
|
list2 = list1[:]
>>> list1 = [ 1 , 2 , 3 , 1 ]
>>> list2 = list1.copy()
>>> print (list2)
[ 1 , 2 , 3 , 1 ]
>>> print ( id (list2))
4314525320
>>> print ( id (list1))
4314524808
|
1
2
3
4
5
|
list1 = [ 1 , 2 , 3 , 2 , 4 ]
list2 = list1[:]
print (list2)
print ( id (list1))
print ( id (list2))
|
输出:
[1, 2, 3, 2, 4]
2485711112520
2485710239496
注意:深拷贝为内存拷贝,开辟了新的内存空间
5.16 list(元组)
功能:将元组转为列表
1
2
3
|
>>> list1 = list (( 1 , 2 , 3 , 4 ))
>>> print (list1)
[ 1 , 2 , 3 , 4 ]
|
6.列表的遍历
6.1 使用for循环遍历列表
语法:
for 变量名 in 列表 :
语句
功能:for循环主要用于遍历列表
遍历:指的是依次访问列表中的每一个元素,获取每个下标对应的元素值
说明:按照顺序获取列表中的每个元素,赋值给变量名,再执行语句,如此循环往复,直到取完列表中所有的元素为止
1
2
3
4
5
6
7
8
|
>>> list1 = [ 'hello' , 78 , '你好' , 'good' ]
>>> for item in list1:
... print (item)
...
hello
78
你好
good
|
6.2 使用while循环遍历列表[使用下标循环]
语法:
下标 = 0
while 下标 < 列表的长度:
语句
下标 += 1
1
2
3
4
5
6
7
8
9
10
|
>>> list1 = [ 'hello' , 78 , '你好' , 'good' ]
>>> index = 0
>>> while index < len (list1):
... print (list1[index])
... index + = 1
...
hello
78
你好
good
|
6.3 同时遍历下标与元素
语法:
for 下标,变量 in enumerate(列表)
语句
1
2
3
4
5
6
7
8
|
>>> list1 = [ 'hello' , 78 , '你好' , 'good' ]
>>> for index,item in enumerate (list1):
... print (index, item)
...
0 hello
1 78
2 你好
3 good
|
enumerate()[枚举]函数用于一个可遍历的数据对象(如列表,元组或者字符串)组合为一个索引序列,同时列出数据与数据下标,一般使用在for循环中
enumerate(obj, [start =0])
obj:一个可迭代对象
start:下标起始位置
7、list转dict
1
2
3
4
5
|
list1 = [( 'a' , 1 ),( 'b' , 2 ),( 'c' , 3 )]
dict1 = {k:v for k,v in list1}
dict2 = {v:k for k,v in list1}
print (dict1)
print (dict2)
|
输出:
{'a': 1, 'b': 2, 'c': 3}
{1: 'a', 2: 'b', 3: 'c'}
8、切片
8.1 一个冒号
1
2
3
4
|
list1 = [ 'a' , 'b' , 'c' , 'd' , 'e' ]
print ( '获取全部:' ,list1[:])
print ( '去头去尾:' ,list1[ 1 : - 1 ])
print ( '取[2,4)' ,list1[ 2 : 4 ])
|
输出:
获取全部: ['a', 'b', 'c', 'd', 'e']
去头去尾: ['b', 'c', 'd']
取[2,4) ['c', 'd']
冒号后面没有值则默认为list1的长度。
8.2两个冒号
冒号后面是步长,切片的步长默认为1,不可为0。
1
2
3
4
5
|
list1 = [ 'a' , 'b' , 'c' , 'd' , 'e' ]
print ( '获取全部:' ,list1[::])
print ( '列表倒置:' ,list1[:: - 1 ])
print ( '从下标0开始,步长为2' ,list1[:: 2 ])
print ( '从下标1开始,步长为2' ,list1[ 1 :: 2 ])
|
输出:
获取全部: ['a', 'b', 'c', 'd', 'e']
列表倒置: ['e', 'd', 'c', 'b', 'a']
从下标0开始,步长为2 ['a', 'c', 'e']
从下标1开始,步长为2 ['b', 'd']
常用的是list1[::-1]
,列表倒置。
希望本文所述对大家python程序设计有所帮助。
原文链接:https://blog.csdn.net/lm_is_dc/article/details/80052333