目录
一、类型转换
1、int()、float()、complex()
(1)int()
①浮点数转换为整数
②整数字符串按指定进制转换为十进制整数(如果不指定进制,就直接把字符串转换为十进制整数)
print(int(3.5)) # 获取实数的整数部分
print(int('119')) # 把整数字符串转换为整数
print(int('1111', 2)) # 把1111看作二进制数,转换为十进制数
print(int('1111', 8)) # 把1111看作八进制数,转换为十进制数
print(int('1111', 16)) # 把1111看作十六进制数,转换为十进制数
print(int(' 9\n')) # 自动忽略字符串两个的空白字符
(2)float():将其他类型数据转换为浮点数
print(float('3.1415926')) # 把字符串转换为实数
print(float('-inf')) # 负无穷大
(3)complex():原来生成复数
print(complex(3, 4)) # 复数
print(complex(6j))
print(complex('3'))
2、bin()、oct()、hex()
分别将任意进制的整数转换为二进制数、八进制数、十六进制数
print(bin(8888)) # 把整数转换为二进制
print(oct(8888)) # 把整数转换为八进制
print(hex(8888)) # 把整数转换为十六进制
3、ord()、chr()、str()
(1)ord():返回单个字符的Unicode编码
print(ord('a')) # 返回字符的ASCII码
print(ord('董')) # 返回汉字字符的Unicode编码
(2)chr():返回Unicode编码对应的字符
print(chr(65)) # 返回指定ASCII码对应的字符
print(chr(33891)) # 返回指定Unicode编码对应的汉字
(3)str():任意类型参数转为字符串
print(str([1, 2, 3, 4])) # 把列表转换为字符串
print(str({1, 2, 3, 4})) # 把集合转换为字符串
4、list()、tuple()、dict()、set()
分别用来把其他类型的数据转换成为列表、元组、字典、集合或者创建空列表、空元组、空字典、空集合
print(list(), tuple(), dict(), set())
s = {3, 2, 1, 4}
print(list(s), tuple(s))
lst = [1, 1, 2, 2, 3, 4]
# 在转换为集合时会自动去除重复的元素
print(tuple(lst), set(lst))
# list()会把字符串中每个字符都转换为列表中的元素
# tuple()、set()函数也具有类似的特点
print(list(str(lst)))
print(dict(name='Dong', sex='Male', age=41))
5、eval()
(1)计算字符串或字符串的值
(2)实现类型转换的功能
print(eval('3+4j')) # 对字符串求值得到复数
print(eval('8**2')) # 计算表达式8**2的值
print(eval('[1, 2, 3, 4, 5]')) # 对字符串形式求值得到列表
print(eval('{1, 2, 3, 4}')) # 对字符串求值得到集合
二、最值
1、max()、min()
计算序列中的所有元素的最大值、最小值
2、参数
列表、元组、字典、集合或其他包含有限个元素的可迭代对象
3、高级用法
支持使用key参数指定排序规则,参数值可以是函数、lambda表达式(后续文章会具体介绍🧐)等可调用对象
data = [3, 22, 111]
print(data)
# 对列表中的元素直接比较大小,输出最大元素
print(max(data))
print(min(data))
# 返回转换成字符串之后最大的元素
print(max(data, key=str))
data = ['3', '22', '111']
print(max(data))
# 返回长度最大的字符串
print(max(data, key=len))
data = ['abc', 'Abcd', 'ab']
# 最大的字符串
print(max(data))
# 长度最大的字符串
print(max(data, key=len))
# 全部转换为小写之后最大的字符串
print(max(data, key=str.lower))
data = [1, 1, 1, 2, 2, 1, 3, 1]
# 出现次数最多的元素
# 也可以查阅资料使用标准库collections中的Counter类实现
print(max(set(data), key=data.count))
# 最大元素的位置,列表方法__getitem__()用于获取指定位置的值
print(max(range(len(data)), key=data.__getitem__))
三、元素数量、求和
1、len()
计算序列长度(元素个数)
2、sum()
计算序列中所有元素之和【一般情况序列中所有元素的类型要相同,且支持加法运算】
data = [1, 2, 3, 4]
# 列表中元素的个数
print(len(data))
# 所有元素之和
print(sum(data))
data = (1, 2, 3)
print(len(data))
print(sum(data))
data = {1, 2, 3}
print(len(data))
print(sum(data))
data = 'Readability counts.'
print(len(data))
data = {97: 'a', 65: 'A', 48: '0'}
print(len(data))
print(sum(data))
四、排序、逆序
1、sorted()
(1)可以对列表、元组、字典、集合或其他可迭代对象进行排序并返回新列表
(2)支持使用key参数指定排序规则,key参数的值可以是函数、类、lambda表达式、方法等可调用对象
(3)可以使用reverse参数指定是升序(reverse=False)排序还是降序(reverse=True)排序,默认升序
from random import shuffle
data = list(range(20))
shuffle(data) # 随机打乱顺序
print(data)
print(sorted(data)) # 升序排序
print(sorted(data, key=str)) # 按转换成字符串后的大小升序排序
print(sorted(data, key=str, # 按转换成字符串后的大小
reverse=True)) # 降序排序
2、reversed()
(1)可对可迭代对象(生成器对象和具有惰性求值特性的zip、map、filter、enumerate、reversed等类似对象除外)进行翻转并返回可迭代的reversed对象
(2)注意:reversed对象具有惰性求值特点,其中的元素只能使用一次,并且不支持使用内置函数len()计算元素个数,也不支持使用内置函数reversed()再次翻转
from random import shuffle
data = list(range(20)) # 创建列表
shuffle(data) # 随机打乱顺序
print(data)
reversedData = reversed(data) # 生成reversed对象
print(reversedData)
print(list(reversedData)) # 根据reversed对象得到列表
print(tuple(reversedData)) # 空元组,reversed对象中元素只能使用一次
五、基本的输入输出
1、input()
(1)接收用户的键盘输入,不论输入什么内容,均返回字符串
(2)可以连用int()、float()、eval()对用户输入的内容进行类型转换
num = int(input('请输入一个大于2的自然数:'))
# 对2的余数为1的整数为奇数,能被2整除的整数为偶数
if num%2 ==1:
print('这是个奇数。')
else:
print('这是个偶数。')
lst = eval(input('请输入一个包含包含若干大于2的自然数的列表:'))
print('列表中所有元素之和为:', sum(lst))
2、print()
通过指定的格式输出信息,语法格式:print(value1, value2, ..., sep=' ', end='\n')
(1)sep参数之前为需要输出的内容(可以有多个)
(2)sep参数用于指定数据之间的分隔符,默认空格
(3)end参数表示输出完所有数据之后的结束符,默认换行符
print(1, 2, 3, 4, 5) # 默认情况,使用空格作为分隔符
print(1, 2, 3, 4, 5, sep=',') # 指定使用逗号作为分隔符
print(3, 5, 7, end=' ') # 输出完所有数据之后,以空格结束,不换号
print(9, 11, 13)
六、range()
1、语法格式
range([start,] stop [, step] ),
start默认为0,step默认为1
2、3种用法
(1)range(stop)
(2)range(start,stop)
(3)range(start,stop,step)
3、返回
(1)具有惰性求值特点的range对象,包含左闭右开区间[start,stop)内以step为步长的整数范围
(2)range对象可以转换为列表、元组或集合,可以用for循环直接遍历所有元素,支持下标和切片
range1 = range(4) # 只指定stop为4,start默认为0,step默认为1
range2 = range(5, 8) # 指定start=5和stop=8,step默认为1
range3 = range(3, 20, 4) # 指定start=3、stop=20和step=4
range4 = range(20, 0, -3) # step也可以是负数
print(range1, range2, range3, range4)
print(range4[2])
print(list(range1), list(range2), list(range3), list(range4))
for i in range(10):
print(i, end=' ')
七、zip()
1、返回
(1)把多个可迭代对象中对应位置上的元素分别组合到一起,返回一个可迭代的zip对象
(2)每个元素都是包含原来的多个可迭代对象对应位置上元素的元组
(3)最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个
2、注意
(1)对象中的元素只能使用一次,访问过的元素不可以再访问
(2)只能从前往后逐个访问对象中的元素,不能使用下标直接访问指定位置的元素
(3)不支持切片操作,不能作为len()和reversed()的参数
data = zip('1234', [1, 2, 3, 4, 5, 6])
print(data)
# 在转换为列表时,使用了zip对象中的全部元素,zip对象中不再包含任何内容
print(list(data))
# 如果需要再次访问其中的元素,必须重新创建zip对象
data = zip('1234', [1, 2, 3, 4, 5, 6])
print(tuple(data))
data = zip('1234', [1, 2, 3, 4, 5, 6])
# zip对象是可迭代的,可以使用for循环逐个遍历和访问其中的元素
for item in data:
print(item)
八、map()、reduce()、filter()
1、map()
from operator import add
print(map(str, range(5)))
print(list(map(str, range(5))))
print(list(map(len, ['abc', '1234', 'test'])))
# 使用operator标准库中的add运算add运算相当于运算符+
# 如果map()函数的第一个参数func能够接收两个参数,则可以映射到两个序列上
for num in map(add, range(5), range(5,10)):
print(num)
2、reduce()
from functools import reduce
from operator import add, mul, or_
seq = range(1, 10)
print(reduce(add, seq)) # 累加seq中的数字
print(reduce(mul, seq)) # 累乘seq中的数字
seq = [{1}, {2}, {3}, {4}]
print(reduce(or_, seq)) # 对seq中的集合连续进行并集运算
3、filter()
seq = ['abcd', '1234', '.,?!', '']
print(list(filter(str.isdigit, seq))) # 只保留数字字符串
print(list(filter(str.isalpha, seq))) # 只保留英文字母字符串
print(list(filter(str.isalnum, seq))) # 只保留数字字符串和英文字符串
print(list(filter(None, seq))) # 只保留等价于True的元素