1 列表(list)
列表是Python
内置的一种数据类型, 它是一种有序的集合, 可以随时添加和删除其中的元素。
1.1 列表的特点
-
列表具有索引概念, 可以通过索引(索引从0开始)来访问list中的每一个位置的元素,当索引超出了范围时,Python会报一个
IndexError
错误,所以,要确保索引不要越界,最后一个元素的索引是len(list) - 1
; -
列表是一个可变的有序表, 可以对列表进行数据的删除、修改、增加、查询操作。
-
列表中的数据可以是不同的数据类型;
说明: 小技巧
list_name[-1]
:取列表的最后一个元素,list_name[-2]
:取列表的倒数第二个值,list_name[-3]:
取列表的倒数第三个值;
1.2 列表的操作
-
创建/查询/修改:
list_name = [数据项1, 数据项2, 数据项3...] # 创建 list_name[index] # 通过索引获取列表的值, 注意索引的index的范围 list_name[index] = new_value # 修改列表的值 #eg lList = [1,2,3, [2,'34'],(1,23)]
-
列表中常用的函数
函数名 说明 实例 len()
h获取列表中数据的个数 len(lList)
append(data) 向列表后面添加data数据 lList.append('test')
insert(idx, data)
将data数据添加到索引为 idx
处lList.insert(0, {"a":1})
extend(model)_ 将数据存储模型model(列表所有的元素、元组中所有元素、集合所有的值、字典的key值)添加列表的后面 lList.extend({'b':2})# 只添加字典的键
b到列表末尾remove(data) 删除列表中第一个data值, 如果data不存在将报错, 无返回值 lList.remove(2)
pop(idx)
从列表中删除指定索引 idx
上的数据,并返回, 如果不指定idx
, 则删除的是最后一个元素;lList.pop(2)
clear()
清空列表中的数据 lList.clear()
index(data) 查询数据data在列表中的 idx
索引值lList.index(2)
count(data) 统计数据data在列表中出现的次数, 返回出现的次数 lList.count(2)
2. 元组(tuple)
· 元组(tuple)也是python内置的一种数据类型, 它是不可修改的有序列表, 元组一旦初始化就不能修改。
2.1 元组的操作
- 创建/查询元组
classmates = ('Michael', 'Bob', 'Tracy') # 元组中有多个元素
t = (1, ) # 定义元组中只有一个元素, 必须有逗号","来消除歧义(因为括号“()”既可以表示元组, 又可以表示数学公式中的小括号, 这就产生了歧义);
t = () # 定义一个空元组
t = ('a', 'b', ['A', 'B']) # 元组中的元素数据类型可以不同
t[0] # 取到到元组的第一个元素
t[t.length-1] # 取到元组的最后一个元素
t[-1] # 取到元组的最后一个元素
t[-2] # 取到倒数第二个元素
由于元组一旦初始化就不能修改, 所以不能对元组进行增(append()、insert()等)、删(remove())、修改等操作, 但还是可以进行查询相关操作;
元组可以通过索引idx
取到对应位置上的值, 但要注意索引不要超出范围, 否则会抛出异常。
-
元组的其它操作
函数名 说明 实例 len(t)
获取元组的长度 len(t)
t.index(data) 查询数据data, 在元组中的第一个位置的索引值 t.index(data)
t.count(data)
查询数据data,在元组t中出现的次数 t.count(data)
-
元组的自动组包和自动拆(解)包
-
自动组包: 将多个数据赋值给一个变量时, 多个数据将包装成一个元组后再将元组赋值给变量, 该过程称为自动组包;
应用场景:
-
设置返回值为多个值
return 1,2,3 #等同于 return (1,2,3)
-
动态字符串赋值传值方式
print(“坐标%d,%d” % (10,20))
-
-
自动拆(解)包: 将元组赋值给多个变量时, 如果元组数据的数量与变量的数量相同, 元组将被自动拆分成多个值, 并赋值给对应变量, 该过程成为自动解包。
应用场景:
-
多个变量接收返回值
a,b,c = func(return 1,2,3) # 等同于 a,b,c = (1,2,3)等同于a,b,c = 1,2,3
-
动态字符串取值的方式
print(“坐标%d,%d” % (10,20)) #将10给第一个%d,将20给第二个%d
-
-
2.2 元组的特点
- 元组也具有索引的概念, 可以通过索引查询到元组中的数据。
- 元组中的数据一旦初始化了就不能进行修改(添加、删除、修改)操作, 只能进行查询;
- 元组中定义的元素是不可变(元素的指向, 而不是值)
-
元组中的数据如果是非引用类型数据, 不允许修改
-
元组中的数据如果是引用类型对象(列表、字典), 该对象不允许替换(地址的引用不能改变), 对象的属性可变。
>>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])
表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向
'a'
,就不能改成指向'b'
,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
-
- 元组中的元素可以是不同的类型;
**不可变的tuple
有什么意义? **
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
3. 列表和元组的相互转换
l = [1,2,3,4]
# 列表转换为元组
t = tuple(l)
# 元组转换为列表
l2 = list(t)
说明: 后面我将逐渐将我的blog转移到我的个人网站 http://www.kendny.cn, 欢迎关注并评论!