列表对象常用方法
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()方法明确说明
cmp
len
max
min
sum
zip
enumerate:返回枚举对象,枚举对象中每个元素是包含下标和元素值的元组
列表推导式
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()函数将其他类型序列转换为元组
元组的值是不可改变的,但是如果元组中包含可变序列,情况就略有不同
序列解包
在调用函数时,在实参前面加上一个星号(*)也可以进行序列解包,从而实现将序列中的元素值依次传递给相同数量的形参
生成器推导式
未完待续