Python序列
列表对象常用方法list.append(x)list.extend(L)list.insert(index,x)list.remove(x)list.pop([index])list.clear()list.index(x)list.count(x)list.reverse()list.sort()list.copy()运算符可以实现将元素添加到列表形式是创建一个新列表并将原列表中的元素和新元素依次复制到新列表的内存空间速度较append慢Python采用的是基于值的自动内存管理方式当为对象修改值时并不是真的直接修改变量的值而是使变量指向新的值这对所有类型的变量都是一样的通过下标来修改序列中元素的值或通过可变序列对象自身提供的方法来增加和删除元素时序列对象在内存中的起始地址是不变的仅仅是被改变值的元素地址发生变化通过extend()方法来增加列表元素也不改变其内存首地址属于原地操作除非必要应尽量避免在列表中间位置插入和删除元素的操作优先考虑append和pop使用乘法来扩展列表对象将列表与整数相乘生成一个新列表新列表是原列表中元素的重复每当插入或删除一个元素之后该元素位置后面所有元素的索引就都改变了x [1, 2, 1, 2, 1, 1, 1] for i in x[]: print(i) if i 1: x.remove(i) print(x)x [1, 2, 1, 2, 1, 1, 1] for i in x[::]: print(i) if i 1: x.remove(i) print(x)可以使用下标直接访问列表中的元素list1 [1, 2, 3] list2 [a, b, c] # 使用 zip 函数将两个列表打包 zipped zip(list1, list2) # 将迭代器转换为列表方便查看结果 result list(zipped) print(result) # 输出: [(1, a), (2, b), (3, c)]切片操作可以原地修改列表内容列表元素的增、删、改、查以及元素替换等操作并且不影响列表对象内存地址切片返回列表元素的浅复制与列表对象的直接赋值并不一样内置函数sorted()返回新列表并不对原列表进行任何修改内置函数reversed()不对原列表做任何修改而是返回一个逆序排列后的迭代对象对字典进行操作时默认是对字典的“键”进行计算如果需要对字典“值”进行计算则需要使用字典对象的values()方法明确说明cmplenmaxminsumzipenumerate:返回枚举对象枚举对象中每个元素是包含下标和元素值的元组列表推导式import random x [random.randint(1, 100) for i in range(10)] print(x) print(list(map(lambda i: i 5, x))) x [random.randint(1, 10) for i in range(10)] y [random.randint(1, 10) for i in range(10)] print(x, y) import operator print(sum(map(operator.mul, x, y))) print(sum((i * j for i, j in zip(x, y)))) print(list(map(operator.add, x, y)))元组属于不可变序列元组一旦创建用任何方法都不可以修改其元素的值也无法为元组增加或删除元素如果确实需要修改只能再创建一个新的元组。可以使用tuple()函数将其他类型序列转换为元组元组的值是不可改变的但是如果元组中包含可变序列情况就略有不同序列解包在调用函数时在实参前面加上一个星号*也可以进行序列解包从而实现将序列中的元素值依次传递给相同数量的形参生成器推导式未完待续