Python全栈开发之数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈开发之数据类型相关的知识,希望对你有一定的参考价值。
字符串
Python字符串对象提供了大量方法用于字符串的检测、替换和排版等操作,另外还有大量内置函数和运算符也支持对字符串的操作,字符串对象是不可变的,所以字符串对象提供的字符串方法都是返回修改后的新字符串
- find() 检测一个字符串是否包含在另一个字符串中,如果找到返回开始的索引值,否则返回-1
- rfind() 类似于find()函数,不过是从右边开始查找
- index() 和find()方法一样,只不过如果字符串不在另一个字符串中会报一个异常.
- rindex() 类似于index(),不过是从右边开始查找
- count() 返回一个字符串在另一个字符串中出现的次数
- split(str[,num]) 以str为分隔符切片string,如果num有指定值,则仅分隔num个子字符串
- rsplit(str[,num]) 以str为分隔符切片字符串,如果num有指定值,则仅分隔num个子字符串
- partition(str) 从str出现的第一个位置起,把字符串分成一个3元素的元组
- rpartition(str) 类似于partition函数不过是从右边开始查找.
- join(str) 以str作为分隔符,将seq中所有的元素合并为一个新的字符串
- lower() 转换字符串中所有大写字符为小写.
- upper() 转换字符串中的小写字母为大写
- capitalize() 首字母大写
- title() 返回标题化的字符串,每个单词首字母都是大写
- swapcase() 翻转字符串大小写
- replace(str1,str[,num]) 把字符串中的str1替换成str2,如果num指定,则替换不超过num次.
- strip() 删除字符串两边的空格
- rstrip() 删除字符串末尾的空格.
- lstrip() 删除字符串左边的空格
- startswith(str) 检查字符串是否以str开始,如果是,返回 True,否则返回 False
- endswith(str) 检查字符串是否以str结束,如果是,返回 True,否则返回 False
- isalnum 如果字符串中存在一个数字则返回True,否则返回False
- isalpha() 全部为字母返回True,否则返回False
- isdigit() 全部为数字返回True,否则返回False
- isspace() 如果字符串中只包含空格,则返回True,否则返回False
- isupper() 如果字符串中包含至少一个区分大小写的字符,并且所有这些字符都是大写,则返回 True,否则返回 False
- islower() 如果字符串中包含至少一个区分大小写的字符,并且所有这些字符都是小写,则返回 True,否则返回 False
- center() 返回指定长度的字符串,居中对齐,以空格填充
- ljust() 返回指定长度的字符串,左对齐,以空格填充
- rjust()返回指定长度的字符串,右对齐,以空格填充
- zfill() 反hi制定长度的字符串,左对齐,在左侧填充数字0
列表
列表是最重要的Python内置对象之一,是包含若干元素的有序连续内存空间,当列表增加或删除元素时,列表对象自动进行内存的扩展和收缩,从而保证相邻元素之间没有缝隙
-
append(x) 将x添加到列表尾部
-
extend(L) 将列表L内所有元素追加到列表尾部
-
insert(x,index) 在列表index的位置插入x,如果index为整数或者大于列表长度,则将x添加到列表尾部,如果index为负数或者小于列表长度的相反数则在列表头部插入x
-
remove(x) 在列表中删除第一个值为x的元素
-
pop([index]) 弹出索引为index的值,如果不指定index则删除最后一个怨怒是
-
clear() 清空列表,保留列表对象
-
index(x) 返回x的索引,如果不存在则抛出异常
-
count(x) 返回x在列表中出现的次数
-
reverse() 将列表逆转
-
sort(key=None,reverse=False) 对列表中的元素进行排序,key表示排序规则,False表示升序,True表示降序
- copy() 浅拷贝
L1 = [1,2,3,4]
L2 = [5,6,7,8]
L1 = L1+L2 会产生并返回一个新列表
L1 += L2 实质上是调用extend,并不会产生新列表,效率比+高,推荐使用+=
- 列表推导式
[x*x for x in range(10)] # 实现嵌套列表的平铺 vec=[[1,2,3],[4,5,6],[7,8,9]] [num for elem in vec for num in elem] # 输出[1,2,3,4,5,6,7,8,9] # 过滤不符合元素 import os [filename for filename in os.listdir(‘.‘) if filename.endswith(‘.py‘)] # 同时遍历多个列表或可迭代对象 [(x,y) for x in range(1,4) for y in range(1,6,2) if x==y] 输出[(1, 1), (3, 3)] # 使用列表推导式实现矩阵转置 mattrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] [[row[i] for row in mattrix] for i in range(10)]# 输出[[1,5,9],[2,6,10],[3,7,11],[4,8,12]] # 列表推导式可以使用函数或复杂表达式 def fun(x): if x%2==0: return x**2 else: return x+1 [fun(x) for x in range(4) if x>0] # 输出[2,4,4,16] # 列表推导式支持文件迭代 with open(‘my.ini‘,‘r‘) as f: print([line for line in f]) # 使用列表推导式生成100以内的素数 from math import sqrt [p for p in range(2,100) if 0 not in [p%d for d in range(2,int(sqrt(p)+1))]]
-
犀利的切片
使用切片获取列表部分元素
num_list = list(range(10)) num_list[::] # 返回包含原列表中所有元素的新列表 num_list[::-1] # 返回包含原列表中所有元素的逆序列表 num_list[::2] # 隔一个取一个,返回包含原列表中偶数位置的列表 num_list[1::2] # 隔一个取一个,返回包含原列表中奇数位置的列表 num_list[3:6] # 指定切片的起始位置 num_list[0:100] # 切片结束位置大于列表长度时,从列表尾部截断 num_list[100] # 抛出异常,不允许越界访问 num_list[100:] # 切片开始位置大于列表长度时,返回空列表
使用切片为列表增加元素
num_list[len(num_list):]=[9] # 在列表尾部插入元素 num_list[:0]=[1,2] # 在列表头部插入多个元素 num_list[3:3]=[4] # 在列表的某个位置插入元素
使用切片替换和修改列表中的元素
num_list[:3]=[1,2,3] # 替换元素,等号两边的列表长度必须相等,否则抛出异常 num_list[3:] = [4,5,6] # 连续替换 num_list[::2]=[0]*3 # 隔一个替换一个 num_list[1::2]=range(3) # 从开始位置隔一个替换一个
使用切片删除列表中的元素
num_list[:3]=[] # 删除前三个元素 del num_list[::3] # 删除前三个元素 del num_list[::2] # 隔一个删除一个
元组
-
元组与列表的异同点
列表和元组都属于有序集合,都支持双向索引访问内部,以及使用count()、index()、len()、map()、filter()、等大量内置函数和+、*、+=、in等运算符,元组属于不可变序列,列表属于可变序列,因此,元组没有提供append()、insert()、extend()等方法,同样元组也没有提供remove()、pop()方法,不能使用del删除元组中的元素,只能使用del删除整个元组,元组可以使用切片,但是只能使用切片访问元素,不支持修改和删除操作,而且元组在内部做了大量优化,因此,元组的效率比列表要高,访问速度要比列表高许多,建议使用元组,因为元组的不可变性决定了使用元组更加安全可靠
- 生成器推导式
生成器推导式在用法上和列表推导式类似,形式上使用()作为定界符,最大的不同时生成器返回的是一个生成器对象,生成器对象和迭代器对象类似,都具有惰性的特点,只在调用时才会产生新元素,比列表推导式具有更高的效率,空间占用率低,适用于大数据的场景,使用生成器产生元素时,可以将其转换为列表、元组,也可以使用生成器对象的next()方法和next()进行遍历,或者直接使用for循环遍历,但是无论哪种形式,只能从前往后访问其中的元素,不可以访问已经访问过的元素
g=(i**2 for i in range(10)) # 创建生成器对象 print(g) # 输出<generator object <genexpr> at 0x0000028366F8AAF0> tuple_g=tuple(g) # 将生成器对象转换成元组 print(tuple_g) # 输出(0, 1, 4, 9, 16, 25, 36, 49, 64, 81) list_g=list(g) # 将生成器对象转换成列表 print(list_g) # 输出[] g=(i**2 for i in range(10)) # 重新获取生成器 list_g=list(g) # 将生成器对象转换成列表 print(list_g) # 输出[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] g=(i**2 for i in range(10)) # 重新获取生成器对象 print(g.__next__()) # 输出0 print(next(g)) # 输出1 g=(i**2 for i in range(10)) # 重新获取生成器对象 for i in g: print(i,end=‘ ‘) # 输出0 1 4 9 16 25 36 49 64 81
字典
字典中的每个元素表示一种映射关系或对应关系,根据提供的键作为下标,可以访问对应的值,如果不存在这个键
会抛出异常,内置函数len()、max()、min()、sum()、sorted()、map()、filter()、enumerate()等同样适用于字典
-
get(x[,y]) 如果字典中存在该键则返回对应的值,否则返回指定值
-
setdefault(x[,y]) 指定的键存在,返回对应的值,如果键不存在,就添加一个新元素并设置对应值默认为None
-
values() 遍历字典的值
-
keys() 遍历字典的键
-
items() 遍历字典的键和值
-
pop() 弹出指定键对应的元素,并返回被删除的元素
-
clear() 清空字典中的所有元素
- copy() 返回字典对象的浅复制
集合
集合属于Python无序可变序列,使用一对大括号作为定界符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不允许重复,集合中只能包含数字、字符串、元组等不可变类型,内置函数len()、max()、min()、sum()、sorted()、map()、filter()、enumerate()等同样适用于字典
集合运算
num1 = {1,2,3,4,5}
num2 = {5,6,7,8,9}
print(num1|num2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(num1.union(num2)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(num1-num2) # {1, 2, 3, 4}
print(num1.difference(num2)) # {1, 2, 3, 4}
print(num1&num2) # {5}
print(num1.intersection(num2)) # {5}
-
set() 将列表、元组、字符串、range对象等其他可迭代对象转换成集合,如果原来的数据中存在重复数据,转换成集合后将只保留一个,如果原序列有可变类型,将无法转换成集合,抛出异常
-
add() 将元素添加到集合中,如果集合中存在该元素将忽略此操作
-
update() 将另一个集合中的元素添加到当前集合中,并自动去除重复元素
-
pop() 随机删除并返回集合中的一个元素,如果集合为空则抛出异常
-
remove(x) 删除集合中一个指定的元素,如果不存在则抛出异常
-
discard(x) 删除集合中一个指定的元素,如果不存在则忽略此操作
-
clear() 清空集合
内置函数
- abs(x) 返回数字x的绝对值或复数x的模
- all(iterable) 如果可迭代对象iterable中所有元素x都等价于True,则返回True,否则,返回False,空迭代对象返回True
- any(iterable) 只要可迭代对象iterable存在元素x使得bool(x)为True,则返回True,空迭代对象返回False
- ascii(obj) 把对象转换成ASCII码表现形式
- bin(x) 把整数x转换为二进制形式
- bool(x) 返回x等价的布尔值
- bytes(x) 生成字节串
- callable(obj) 测试对象obj是否可调用
- compile() 用于把Python代码编译成可被exec()或eval()函数执行的代码对象
- complex(real,[imag]) 返回复数
- chr(x) 返回Unicode编码为x的字符串
- delattr(obj,name) 删除属性,等价于del obj.name
- dir(obj) 返回指定对象或模块obj的成员列表,如果不带参数则返回当前作用域内所有标识符
- divmod(x,y) 返回包含整商和余数的元组
- enumerate(iterable[,start]) 返回包含元素形式为(start,iterable[0]),(start+1,iterable[1]),(start+2,iterable[2]),...的迭代器对象,start表示索引的起始值
- eval(s[,globals[,locals]]) 计算并返回字符串s中表达式的值
- exex(x) 执行代码或代码对象x
- exit() 退出当前解释器环境
- filter(func,seq) 返回fiter对象,其中包含序列seq中使得单参数函数func返回值为True的那些元素,如果函数func为None则返回包含seq中等价于True的元素的filter对象
- float(x) 把整数或字符串x转换为浮点并返回
- frozenset([x]) 创建不可变的集合对象
- getattr(obj,name[,default]) 获取对象中指定属性的值,等价于obj.name,如果不存在指定属性则返回default的值,如果要访问的属性不存在并且没有指定的default则抛出异常
- globals() 返回包含当前作用域内全局变量及其值的字典
- hasattr(obj,name) 测试对象obj是否具有名为name的成员
- hash(x) 返回对象x的哈希值,如果x不可哈希则抛出异常
- help(obj) 返回对象obj的帮助信息
- hex(x) 把整数x转换为十六进制
- id(obj) 返回对象obj的地址
- input([提示]) 显示提示,接受键盘输入的内容,返回字符串
- int(x[,d]) 返回实数、分数或高精度实数x的整数部分,或把d进制的字符串x转换为十进制并返回,d默认为十进制
- isinstance(obj,class) 测试对象obj是否属于指定类型
- insubclass(cls,class) 测试类cls是否为指定类型的子类,用法与isinstance()函数相似
- iter(...) 返回指定对象的可迭代对象
- len(obj) 返回对象obj包含的元素个数,适用于列表、元组、字典、字符串以及range对象,不适用于具有惰性求值特点的生成器对象和map、zip等迭代对象
- list([x])、set([x])、tuple([x])、dict([x]) 把对象x转换成为列表、集合、元组或字典并返回,或生成空列表、空集合、空元组、空字典
- locals() 返回包含当前作用域内局部变量及其值的字典
- map(func,*iterables) 返回包含若干函数值的map对象,函数func的参数分别来自与iterables指定的一个或多个迭代对象
- max(...)、min(...) 返回多个值中或者包含有限个元素的可迭代对象中所有元素的最大值、最小值,要求所有元素之间可比较大小,允许指定排序规则,参数为可迭代对象时还允许指定默认值
- next(iterator[,default]) 返回迭代对象x中的下一个元素,允许指定迭代结束之后继续迭代时返回的默认值
- oct(x) 把整数x转换为八进制串
- open(fn[,mode]) 以指定模式mode打开文件fn并返回文件对象
- ord(x) 返回一个字符x的Unicode字符
- pow(x,y,z) 返回新的y次方,等价与xy或(xy)%z
- print(value,...sep=‘‘,end=‘ ‘,file=sys.stdout,flush=False) 基本输出函数,默认输出到屏幕,相邻数据使用空格分隔,以换行符结束所有数据的输出
- quit() 退出当前解释器环境
- range([start,]end[,step]) 返回range对象,其中包含左闭右开区间[start,end)内以step为步长的整数
- reduce(func,sequence[,initial]) 将双参数的函数func以迭代的方式从左到右依次应用至序列seq中每个元素,并把中间计算结果作为下一次计算的操作数之一,最终返回单个值作为结果(from functools import reduce)
- repr(obj) 返回对象obj的规范化字符串表示形式,对于大多数对象有eval(repr(obj))==obj
- reversed(seq) 返回seq(可以是列表、元组、字符串、range等对象)中所有元素逆序后的迭代器对象,不适用于具有惰性求值特点的生成器对象和map、zip等可迭代对象
- round(x[,小数位数]) 对x进行四舍五入,若不指定小数位数,则返回整数
- sorted(iterable,key=None,reverse=False) 返回排序后的列表,其中iterable表示要排序的序列或迭代对象,key用来指定排序规则或依据,reverse用来指定升序或降序
- str(obj) 把对象obj直接转换为字符串
- sum(x,start=0) 返回序列x中所有元素之和,允许指定起始值start,返回start+sum(x)
- type(obj) 返回对象obj的类型
- zip(seq1[,seq2[...]]) 返回zip对象,其中元素为(seq1[i],seq2[i],...)形式的元祖,最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个
以上是关于Python全栈开发之数据类型的主要内容,如果未能解决你的问题,请参考以下文章