CC-Python-数据类型之list,tuple
1,list,列表
列表使用中括号[]表示,内可盛放各种数据类型如 1(整形),'abc'(字符串)等等
Ⅰ.列表的增
1、append()
append是在列表最后面添加元素
lis = ['a', 'b', 'c', 'd', 'e'] lis.append('f') print(lis) ['a', 'b', 'c', 'd', 'e', 'f']
2、insert()
在指定索引处插入新元素
insert(索引,新元素)
lis = ['a', 'b', 'c', 'd', 'e'] lis.insert(0,'A') print(lis) ['A', 'a', 'b', 'c', 'd', 'e']
如果索引超出列表上界或下届,则在开头或结尾添加
lis = ['a', 'b', 'c', 'd', 'e'] lis.insert(8,'A') print(lis) ['a', 'b', 'c', 'd', 'e', 'A']
3、extend()
将可迭代对象添加进列表里
extend(可迭代对象)
s1 = 'fgh' lis = ['a', 'b', 'c', 'd', 'e'] lis.extend(s1) print(lis) ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
列表之间可以通过'+'连接,单个列表可以通过'*'复制
lis = ['a', 'b', 'c', 'd', 'e'] lis2 = ['f', 'g', 'h'] lis3 = lis + lis2 print(lis3) ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
s1 = ['a'] s2 = s1 * 5 print(s2) ['a', 'a', 'a', 'a', 'a']
Ⅱ.列表的删
1、remove
remove按元素从左向右查找并删除找到的第一个元素
lis = ['a', 'b', 'c', 'c', 'b', 'a'] lis.remove('c') print(lis) ['a', 'b', 'c', 'b', 'a']
如果remove的元素不在列表里,则会报错
lis = ['a', 'b', 'c', 'c', 'b', 'a'] lis.remove('x') print(lis) ValueError: list.remove(x): x not in list
2、pop
pop是按照索引弹出某个元素,默认为最后一个元素,又返回值,就是弹出的那个元素
lis = ['a', 'b', 'c', 'c', 'b', 'a'] s = lis.pop() print(s) print(lis) a ['a', 'b', 'c', 'c', 'b']
lis = ['a', 'b', 'c', 'c', 'b', 'a'] s = lis.pop(2) print(s) print(lis) c ['a', 'b', 'c', 'b', 'a']
3、clear
清空列表
lis = ['a', 'b', 'c', 'c', 'b', 'a'] lis.clear() print(lis) []
4、del
del的第一个用法是所有数据类型都有的,例如 del list1,就是在内存中删除list1这个变量
lis = ['a', 'b', 'c', 'c', 'b', 'a'] del lis print(lis) NameError: name 'lis' is not defined
在操作列表时,del可以通过切片的方式来删除列表中某些元素
lis = ['a', 'b', 'c', 'c', 'b', 'a'] del lis[0:3] print(lis) ['c', 'b', 'a']
Ⅲ.列表的改
1、通过索引修改
lis = ['a', 'b', 'c', 'c', 'b', 'a'] lis[0] = 'A' print(lis) ['A', 'b', 'c', 'c', 'b', 'a']
2、迭代修改一个索引范围的元素
lis = ['a', 'b', 'c', 'c', 'b', 'a'] lis[0:3] = 'ABCDE' print(lis) ['A', 'B', 'C', 'D', 'E', 'c', 'b', 'a']
Ⅳ.列表的查
1、通过索引查找一个元素
lis = ['a', 'b', 'c', 'c', 'b', 'a'] print(lis[2]) c
2、通过元素找索引 index
index(value,[start,[stop]]) 可切片寻找
lis = ['a', 'b', 'c', 'c', 'b', 'a'] print(lis.index('a')) print(lis.index('a',1) 0 5
找不到会报错
lis = ['a', 'b', 'c', 'c', 'b', 'a'] print(lis.index('d')) ValueError: 'd' is not in list
Ⅴ.列表的其他操作
1、reverse
对列表进行反转,没有返回值
lis = ['a', 'b', 'c'] lis.reverse() print(lis) ['c', 'b', 'a']
2、sort
sort(key=None,reverse=False)
对列表进行排序,就地修改,默认升序
reverse默认为False,当reverse为True时反转变为降序
通过key进行自定义排序方式
lis = ['a', 'g', 'e', 'c' , 's', 'f', 'b'] lis.sort() print(lis) ['a', 'b', 'c', 'e', 'f', 'g', 's']
lis = ['a', 'g', 'e', 'c' , 's', 'f', 'b'] lis.sort(reverse=True) print(lis) ['s', 'g', 'f', 'e', 'c', 'b', 'a']
3、count
计数,统计某个元素在列表中出现的次数
lis = ['a', 'b', 'c', 'c', 'b', 'a'] print(lis.count('a')) 2
4、join
使用前提:列表中的元素全是字符串类型
用法: str.join(list)
lis = ['a', 'b', 'c', 'c', 'b', 'a'] print('_'.join(lis)) a_b_c_c_b_a
2,tuple,元组
由于元组不可修改,所以只有查一个用法
用法与列表的查一致
但值得注意的是,如果元素里嵌套一个可更改的类型如列表,虽然元组不可变,但是里面嵌套的列表是可以改变的
tu = ('a', 's', ['a','b','c'], 'f') tu[2].append('d') print(tu) ('a', 's', ['a', 'b', 'c', 'd'], 'f')
原因是:元组不可改指的是元组元素的内存地址不可以改变,例如,假如上述元组元素'a'在内存中的地址是123456,而元素列表的内存地址是654321,修改列表是修改了内存地址654321内的数据,而不是修改了这个元素指向的地址,但是要修改一个元素如令tu[0] = 'c',是将元组的第一个元素地址指向了新的地址(字符串'c'在内存中的地址假设111111),改变了原有指向123456,是错误的