1.序列类型:
序列常用操作:
索引、切片、序列相加、乘法(对字典和集合不支持)
检查某个元素是否是序列的成员
计算序列的长度、最大值和最小值
索引:[]
索引号从0,1,2,3....开始
索引从后往前是从-1,-2,-3...开始
切片:
语法:
序列名:[start:end:step]
注意:
可以省略第一个参数但第一个冒号不能省,默认为0
可以省略最后一个参数和冒号默认为1
序列相加:
+
注意:只能是同类型的序列相加:
列表+列表
元组+元组
字符串+字符串
序列的乘法:
序列 * n = 序列重复n次的结果
常应用在输出指定个数的空格或符号
检查某个元素是否是序列的成员
要检查的元素 in/not in 序列 ,返回bool值
计算序列的长度、最大值和最小值
len():计算序列的长度
语法:def len(__obj: Sized) -> int
函数接收一个参数__obj,冒号后面的Sized是类型提示(type hint),它表明传入的__obj对象应该是实现了Sized协议的对象。在 Python 中,很多内置的数据类型(如列表、元组、字符串等)都实现了Sized协议,这意味着它们都有一个可以获取其长度的方法。
max():最大值,参数至少两个或是一个可迭代对象,可以是数值或字符串
min():最小值,参数至少两个或是一个可迭代对象,可以是数值或字符串
常用函数:
sum():求元素和
语法:def sum(__iterable: Iterable, start: int = 0) -> int
必须是一个可迭代参数;start:关键字参数默认值为0。它表示一个起始值,在计算总和时会先加上这个起始值,然后再依次累加可迭代对象中的元素值。
示例:result2 = sum([True, False, 5])
sorted():对元素排序
语法:
def sorted(__iterable: Iterable,
key: None = None,
reverse: bool = False) -> list
key:可选参数,key=lambda x: x[0]表示按照元组的第一个元素排序
reverse:可选参数,如果值为True时则进行降序排序
reversed():-> obj 反转序列元素,参数必须支持翻转的特性,返回一个对象
enumerate():它用于将一个可迭代对象(如列表、元组等)转化为一个枚举对象。这个枚举对象可以同时提供元素在可迭代对象中的索引以及对应的元素本身,在很多需要同时获取索引和元素进行处理的场景中非常有用。
语法:
def __init__(self,
iterable: Iterable[_T],
start: int = ...) -> None
start:可选参数,指定从哪个索引开始,默认从第一个开始枚举
-> None:此函数是初始化示例属性,而不是返回一个具有实际计算意义的结果。
示例
AA = list(range(10,20))
for i,a in enumerate(AA,start=2):
print(i,a)
2.
3.数字的处理函数:
(1)round():四舍六入五取偶
(2)math模块、floor()地板:向下取整数、天花板ceil():向上取整数(
(3)int() 、// 取整数部分
(4)min() 比较取最小数
(5)max()比较取最大数
(6)pow(x,y)等于xy
(7)math.sqrt(x) x求平方根
(8) bin() 十进制整数转化为二进制字符串** :0b开头
(9) oct() 十进制整数转化为八进制字符串 :Python2.x 版本的 8 进制以 0 作为前缀表示。Python3.x 版本的 8 进制以 0o 作为前缀表示。
(10) hex() 十进制整数转化为十六进制字符串:0x开头
(11) math.pi π
(12) math.e 自然对数
(13)type(obj) 判断obj为啥类型,注意返回值是类型格式,而不是字符串
(14)isinstance(obj, class_or_tuple),返回布尔值
补充:bool包含在int中,其中true=1 false=0
示例:
type(a)
type(‘abc’)
type(123)
isinstance(6, str)
isinstance(6, (str, bool, int))
type(1+True)
type(1+True+2.0)
1+true+0.5=2.5 向高精度转化的规律
4.列表定义:
5.列表list、链表、queue、stack的差异
链表:网状有序结构,例如路由
queue:跟列表类似,但是有要求的:先进先出、后进后先出
stack:后进先出
6.
注意:list()里面要不为空要不为可迭代对象
7.
8.列表查询:
(1)listname.index(value,[start,[stop]])
语法 :
index(self, __value, __start=0, __stop=sys. maxsize) -> int
通过值value,从指定区间查找列表内的元素是否匹配
匹配第一个就立即返回索引
匹配不到,抛出异常ValueError
例: var.index(b,-1) 从倒数第一个元素开始查
(2)listname.count(obj)
语法:def count(self, __value: _T) -> int
返回列表中匹配value的次数
(3)时间复杂度
index和count方法都是O(n)
随着列表数据规模的增大,而效率下降
(4)listname.len() 直接查找最后一个元素标签
例:len(var)
(5)sum(listname[,start]):统计数值列表中各元素的合,如果指定start则求合在加上start
语法:def sum(__iterable: Iterable, start: int = 0) -> int
(6)enumerate枚举
语法:
def __init__(self,
iterable: Iterable[_T],
start: int = ...) -> None
start:可选参数,指定从哪个索引开始,默认从第一个开始枚举
-> None:此函数是初始化示例属性,而不是返回一个具有实际计算意义的结果。
示例:
AA = list(range(10,20))
for i,a in enumerate(AA,start=2):
print(i,a)
9.列表元素修改
索引访问修改
list[index] = value
注意:索引不要超界
10.列表增加
列表.append(object) -> None
语法:def append(self, __object: _T) -> None
列表尾部追加元素,返回None
返回None就意味着没有新的列表产生,就地修改
时间复杂度是O(1)
11.列表插入元素
列表.insert(index, object) -> None
语法:insert(self, __index, __object) -> None
在指定的索引index处插入元素object
返回None就意味着没有新的列表产生,就地修改
时间复杂度是O(1)~O(n),插入到尾部时复杂度是O(1)
索引能超上下界吗?
超越上界,尾部追加
超越下界,头部追加
**12.将可迭代对象的元素追加进来到原列表后面 **
列表.extend(seq) -> None
语法:def extend(self, __iterable: Iterable[_T]) -> None
例:lst.extend(list1)
13.+ -> list
连接操作,将两个列表连接起来
产生新的列表,原列表不变
本质上调用的是__add__()方法
例: lst+lst1
14. -> list*
重复操作,将本列表元素重复n次,返回新的列表
例: lst = [1]
lst *2
lst = [1,1]
15.删除列表或列表元素:
(1)列表.remove(value) -> None
语法: def remove(self, __value: _T) -> None
从左至右查找第一个匹配value的值,移除该元素,返回None
时间复杂度O(n)
(2)列表.pop([index])
语法:def pop(self, __index: SupportsIndex = -1) -> _T
默认从末尾弹出一个元素,返回所弹出的元素
指定索引index,就从索引处弹出一个元素,索引超界抛出IndexError错误
指定索引时,时间复杂度O(n)
(3)clear()
语法:def clear(self) -> None
清除列表所有元素,剩下一个空列表
清除时时间复杂度O(n),还需要GC进行垃圾回收比较消耗资源
(4)del 删除列表,不常用因为python自带垃圾回收功能
(5)del list[1] 删除列表中第二个元素
**16.pass:**占位符,用于语句(如if while)占位防止缩进报错
17.其他操作
(1)reverse() -> None
将列表元素反转,返回None
就地修改,注意与reversed区分
(2)排序
使用列表对象sort()方法实现
listname.sort(key=None, reverse=False) -> None
对列表元素进行排序,就地修改,默认升序
reverse为True,反转,降序
key一个函数,指定key如何排序,如别区分字母大小写
lst.sort(key=functionname)
注意与sorted区分,返回的是一个列表
(3)in/not in 判断是否在列表里面,返回bool值,可用于if等语句判断
例: [3,4] in [1, 2, [3,4]]
18.列表复制:
补充: id() 查看内存位置
is 判断内存位置是否相等
== 判断内容是否相等
lst1 = lst0 这说明把内存中的同一个地址赋给了俩个名字,如果修改内容,这俩名字的值都会改变
copy() -> List
浅拷贝:相当于映射出一个新列表,内存地址不变,当一个列表元素改变时另一个也会改变
语法:def copy(self) -> list[_T]
示例:
lst0 = [1, [2, 3, 4], 5]
lst5 = lst0.copy()
lst5[1][1] = 20
结果还是
lst5 == lst0
与之相反的深拷贝:拷贝后会是新的内存地址和列表
import copy
deep_copied_list = copy.deepcopy(original_list)
19.随机数(random模块)
20.列表推导式:
语法:
list = [Expression for var in range]
list = [Expression for var in list]
list = [Expression for var in list if condition]
例1
import random
list = [random.randint(10,100) for i in range(10)]
print(list)
例2
list1 = [i*i for i in range(2,11,2)]
print(list1)
例3
list = [2,5,7,9]
list1 = [i*5 for i in list]
例4
list = [2,5,7,9]
list1 = [i*5 for i in list if i > 6]
21.二维列表
例1
room = [[11,12,13,14,15],
[21,22,23,24,25],
[31,32,33,34,35]]
例2
room = []
for i in range(1,4):
room.append([])
for j in range(1,6):
room[i-1].append(10*i+j)
print(room)
例3
room = [[10*i+j for j in range(1,6)] for i in range(1,4)]
print(room)
例4
str1 = "移舟泊烟渚"
str2 = "日暮客愁新"
str3 = "野旷天低树"
str4 = "江清月近人"
verse = [list(str1), list(str2), list(str3), list(str4)] # 定义一个二维列表
print("\n-- 横版 --\n")
for i in range(4): # 循环古诗的每一行
for j in range(5): # 循环每一行的每个字(列)
if j == 4: # 如果是一行中的最后一个字
print(verse[i][j]) # 换行输出
else:
print(verse[i][j], end="") # 不换行输出
verse.reverse() # 对列表进行逆序排列
print("\n-- 竖版 --\n")
for i in range(5): # 循环每一行的每个字(列)
for j in range(4): # 循环新逆序排列后的第一行
if j == 3: # 如果是最后一行
print(verse[j][i]) # 换行输出
else:
print(verse[j][i], end="") # 不换行输出