1 列表
1.1 基本操作
可对列表执行所有的标准序列操作,如索引、切片、拼接和相乘,列表是可以修改的。
修改列表,给元素赋值
x = [1, 1, 1]
x[1] = 2
print(x) #[1, 2, 1]
删除元素
name = ['bob', 'joj', 'zoz']
del name[1]
print(name) #['bob', 'zoz']
给切片赋值
#修改
name = list('hello')
name[3:] = list('xyz')
print(name)
#['h', 'e', 'l', 'x', 'y', 'z']
#插入
num1 = [1, 5]
num1[1:1] = [2, 3, 4]
print(num1)
#[1, 2, 3, 4, 5]
#删除
num2 = ['a', 'b', 'c', 'd', 'e']
num2[1:4] = []
print(num2)
#['a', 'e']
#del num2[1:4] 等效
#结合步长 del num2[1:4:2] => ['a', 'c', 'e']
1.2 列表方法
方法是与对象(列表,数,字符串等)紧密联系的函数,格式如object.method(arguments)
#append 用于将一个对象附加到列表末尾
lst = [1, 2, 3]
lst.append(4)
print(lst) #[1, 2, 3, 4]
#clean 清空列表
lst.clear()
print(lst) #[] 类似切片赋值lst[:] = []
#copy 复制列表,区别常规赋值,常规复制只是将另一个名称关联到列表
a = [1, 2, 3]
b = a
b[1] = 4
print(a) #[1, 4, 3]
a1 = [1, 2, 3]
b1 = a1.copy()
b1[1] = 4
print(a1) #[1, 2, 3] a1,b1指向不同的列表
#count 计算指定的元素在列表中出现了多少次
print(['to', 'bo', 'ab', 'bo', 'bob'].count('bo')) #2
x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
print(x.count(1)) #2
print(x.count([1,2])) #1
#extend 用一个列表来扩展另一个列表
a = [1, 2]
b = [3, 4]
a.extend(b)
print(a) #[1, 2, 3, 4]
#extend是直接修改原来的列表,拼接返回的是全新的队列,拼接可以a += b,就是将新队列的结果赋值给a,这样效率就没有extend高
#index 在队列中查找指定值第一次出现的索引
knights = ['We', 'are', 'the', 'who', 'say', 'ni']
print(knights.index('are')) #1
#print(knights.index('no')) #报错,值必须存在
#insert 将一个对象插入列表
c = [1, 2, 3, 5]
c.insert(3, 'four') #c[3:3] = ['four']
print(c) #[1, 2, 3, 'four', 5]
#pop 从列表中删除一个元素(末尾为最后一个)并返回
d = [1, 2, 3]
print(d.pop()) #3
print(d) #[1, 2]
print(d.pop(0)) #1
print(d) #[2]
e = [1, 2, 3]
e.append(e.pop())
print(e) #[1, 2, 3]
#remove 删除第一个指定值得元素
f = ['to', 'be', 'or', 'not', 'to', 'be']
f.remove('be')
print(f) #['to', 'be', 'or', 'not', 'to', 'be']
#f.remove('bob') #报错,指定值必须存在
#reverse 按相反的顺序排列列表中的元素
h = [1, 2, 3]
h.reverse();
print(h) #[3, 2, 1]
#sort 就地对列表排序
h1 = ['za', 'ao', 'bob', 'boa']
h1.sort()
print(h1) #['ao', 'boa', 'bob', 'za']
h2 = h1.sort()
print(h2) #None 就地排序意味着对原来的列表进行修改,不返回任何值
高级排序
方法sort接受两个可选参数: key和reverse。这两个参数通常是按名称指定的,称为关键字参数,将在第6章详细讨论。参数key类似于参数cmp:你将其设置为一个用于排序的函数。然而,不会直接使用这个函数来判断一个元素是否比另一个元素小,而是使用它来为每个元素创建一个键,再根据这些键对元素进行排序。因此,要根据长度对元素进行排序,可将参数key设置为函数len。
x = ['aardvark', 'abalone', 'acme', 'add', 'aar']
x.sort(key = len)
print(x) #['add', 'aar', 'acme', 'abalone', 'aardvark']
对于另一个关键字参数reverse,只需将其指定为一个真值( True或False)以指出是否要按相反的顺序对列表进行排序。
y = [4, 6, 2, 1, 7, 9]
y.sort(reverse = True)
print(y) #[9, 7, 6, 4, 2, 1]
2 元祖
与列表一样,元组也是序列,唯一的差别在于元组是不能修改的。元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。如果要创建的元组中只有一个元素,要在它的后面加上一个逗号‘,’。
temp1 = 1,2,3 #(1, 2, 3)
print(temp1)
#(1, 2, 3)
temp2 = 3 * (4 + 2)
print(temp2) #18
temp3 = 3 * (4 + 2,)
print(temp3) #(6, 6, 6)
#tuple 进行类型转换
temp4 = tuple([1, 2, 3])
print(temp4)
#(1, 2, 3)
temp5 = tuple('abc')
print(temp5)
#('a', 'b', 'c')
元祖的访问和切片
x = 1, 2, 3
print(x[1]) #2
print(x[1:2]) #(2,) #元祖的切片还是元祖
元祖type
temp = ()
print(type(temp))
#<class 'tuple'>
temp1 = (1,)
print(type(temp1))
#<class 'tuple'>
temp2 = (1)
print(type(temp2))
#<class 'int'>
一个小demo
def get_info():
name = "show"
age = 10
return name,age
name,age = get_info()
print(name)
print(age)
#show
#10
info = get_info()
print(info)
#('show', 10)
print(type(info))
#<class 'tuple'>
tuple 放弃了对元素的增删(内存结构设计上变的更精简),换取的是性能上的提升:创建 tuple 比 list 要快,存储空间比 list 占用更小。