python数据类型
1、列表
数据的集合,可以放任何数据,数据可重复。
L1 = [] L1 = ['a', 'b',] L1 = list()
age = [21,14,34,25,11] age[0] = 21, age[1] = 14 age[-1] = 11, age[-2] = 25 age.index(34) = 2(如果重复只取第一个找到的索引值) age.count(34) = 1,统计元素34的个数 切片 age[0:2] = [21,14](顾头不顾尾) age[-2:] = [25,11] age[:2] = [21,14] age[::2] = [21,34,11](这里的2是步长)
age = [21,14,34,25,11] age.append(22) = [21,14,34,25,11,22] age.insert(1,13) = [21,13,14,34,25,11,22] age[0] = 'abc' ->['abc',14,34,25,11] age[0:3] = "hell0"(批量修改) ->['h','e','l','l','o',25,11]
age=[21,14,34,25,11]age.pop(),删除最后一个,并返回删除元素, ->[21,14,34,25], 返回的结果是11 age.remove(元素),若有相同的元素,删除从左到右找到的第一个元素 ->[21,34,25,11] del age[2] ->[21,14,25,11] del age[:2](批量删除) ->[34,25,11]
for i in age: print(i) ->21 14 34 25 11 range(10)就是一个列表 python2, [0,1,2,3,4,5,6,7,8,9] python3, range(0, 10) 额外: enumerate(age)枚举函数 for index,i in enumerate(age): print(index, i) ->0 21 1 12 2 34 3 25 4 11
age.sort(),返回结果None(元素是同类型数据,元素是字符串,按照ASCII表排序) ['a', 'c', 'b', 'd', 'ab', 'a#']-> ['a', 'a#', 'ab', 'b', 'c', 'd'] age.reverse() 反序
L1+L2
L1.extend(L2), 返回None,逐个添加,直接修改了L1
L1*2
题目: 使用切片实现反序:[1,2,3,4,5,6,7,8,1][::-1]
复制(copy,deepcopy)
copy:浅拷贝。只拷贝父对象,不会拷贝对象的内部的子对象
deepcopy:深拷贝。拷贝对象及其子对象
copy 1、 a1 = [1,2,3,4] a2 = a1 a1[0] = -1 a1->[-1,2,3,4] a2->[-1,2,3,4] id(a1)和id(a2)相同,表示a1和a2共用一份数据 2、 a1 = [1,2,3,4] a2 = a1.copy() a1[0] = -1 a1->[-1,2,3,4] a2->[1,2,3,4] id(a1)和id(a2)不相同,但id(a1[0])和id(a2[0])相同 3、 a1 = [1,2,3,4,[5,6]] a2 = a1.copy() a1[-1][0] = -5 ->a1 = [1,2,3,4,[-5,6]] ->a2 = [1,2,3,4,[-5,6]] copy只能第一层复制,多层次复制使用deepcopy() import copy a2 = copy.deepcopy(a1) a1[-1][0] = -5 ->a1 = [1,2,3,4,[-5,6]] ->a2 = [1,2,3,4,[5,6]]
2、字符串
swapcase, 大写变小写,小写变大写 s="Hello WORLD" s.swapcase() >>> "hELLO world"
# 每个单词的首字母大写 "we are family.".title() # 结果:"We Are Family."
capitalize, 首字母大写 s=“hello” s.capitalize() >>> 'Hello"
casefold, 变小写,== lower() s='HELlo' s.casefold() >>> 'hello'
center(), 居中扩充 s='hello' s.center(10, "*") >>> '**hello***'
count(), 统计个数 s='aaabbbbccddaabb' s.count('a') >>> 5 s.count('a',2) >>> 3(从2开始统计) s.count('a',2, 7) >>> 1(2~7)
endswith(), 以什么结尾 s="hello' s.endswith('o') >>> True s.endswith('a') >>> False startswith(), 以什么开始
expandtabs(),扩展字符串内的\t s="a\tb" print(s) >>> a b print(s.expandtabs(20)) >>> a b
find(), 从左查找,找到返回索引,再找不到返回-1 rfind(), 从右开始 s='hello' s.find('l') >>> 2 s.find('a') >>> -1 index(),返回第一个找到的索引,找不到报错 rindex(), 从右开始
format(), 格式化 s='I am {0}, age is {1}' s.format('sun', 22) s = 'I am {name}, age is {age}' s.format(name='sun', age=22)
isalnum(), 字母+数字 “aa33”.isalnum() >>> True “aa33?”.isalnum() >>> False isalpha(),字母 "aadd".isalpha() >>> True "aa22".isalpha() >>> False isdecimal(), 整数 = isdigit()
isidentifier() 判断变量名是否合法 "3dd".isidentifier() >>> False "name".isidentifier() >>> True
islower(),是否小写 isupper(),是否大写 isspace(), 是否是空格,"aa ".isspace() -> False istitle(), 单词第一个字母是否大写 isprintable(), 是否存在不可见不可显示的内容 存在\n或\t等看不见的内容,为False "adifif\tdd".isprintable >>> False
join() a=[1,2,3,4] "".join(a) >>> "1234" ",".join(a) >>> "1,2,3,4" "-".join(a) >>> "1-2-3-4"
lower(), 变小写
upper(), 变大写
strip(),去两边不可见内容
rstrip(),
lstrip()
maketrans(),制作密码表,和translate配合使用 str_in = "abcdef" str_out = "@#$%!&" table = str.maketrans(str_in, str_out) table >>> {97: 64, 98: 35, 99: 36, 100: 37, 101: 33, 102: 38} "badf".translate(table) >>> '#@%&'
split(),拆分成列表 s = 'hello world' s.split() >>> ['hello', 'world'] s.split('o') >>> ['hell', ' w', rld'] s.split('o',1) >>> ['hell', ' world'] rsplit(),从右开始 splitlines(),以行拆分 partition(), 拆分 s.partition('o') >>> ['hell','o', 'world'] rpartition(), 从右开始 zfill(), 左补零 'aa'.zfill(5) >>> '000aa'
3、元组
只读,不可修改
特点:不可变,可以包含其他可变元素,这些元素可以修改,
如:a=(1, 2, 3, [3, 4, 5]) ; a[3][0] = 5 >>> (1, 2, 3, [5, 4, 5])
声明:
a = tuple()
a = ()
a = ("sun",)
功能:
index
count
切片
4、字典
python语言中唯一的映射类型。(映射类型就是一种关联式的容器类型,存储了对象与对象之间的映射关系。字典是由键到键值的映射关系)
特征:
key-value结构
key,必须可hash,不可变类型,必须唯一
value,可以存放任意多值,可修改,不唯一
无序
查找速度快
dic = { 'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4', } 增加: dic['k5'] = 'v5' 修改 dic['k4'] = 'value4' 查找 a = dic['k4'], 找不到报错 ele = dic.get('k4'), 找不到返回None, ele = dic.get("abc", "not find"), 找不到返回"not find" 删除 dic.pop('k1') del dic['k1'] dic.popitem(), 随机删除 方法: dic.clear(), 清空 dic.items(),>>> [('k1','v1'),('k2','v2'),('k3','v3'),('k4','v4')] dic.keys(), >>> 类的对象,可用于 for循环,list,__iter__() dic.values(), >>> 类的对象,可用于 for循环,list,__iter__() dic.update(),升级更新,有,覆盖,没有,添加 dic1 = {1: 2, 3: 4, 'k1': 'new v1'} dic.update(dic1) >>> dic {'k1': 'new v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4', 1: 2, 3: 4} dic.setdefault(),有key,拿出value,没有,创建新的并返回value dic.setdefault(3, 4) >>> dic {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4', 3: 4} dic.setdefault('k1', 4) "v1" >>> dic {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'} fromkeys(),批量生成一个字典 {}.fromkeys([1,2,3], "a") >>> {1: 'a', 2: 'a', 3: 'a'}
5、hash
一般称为‘散列’,把任意长度的输入,通过散列算法,变成固定长度的输出,这个输出就是散列值
特征:hash值的计算过程是一句这个值的一些特征计算的,这就要求被hash的值必须固定,因此被hash的值是不可变的,如数字,字符串,元组
用途:文件签名,MD5加密,密码验证
例:hash("abc") >>> -3316206005911609992
6、集合
无序的,不重复的数据组合
用法:
去重,把列表变成集合,会自动去掉重复的;关系测试
定义: s = {1};s = set()
add(),增加 add(1) update(),增加 update([1,2,4]) pop(),随机删除 remove(元素),删除,没有报错 discard(元素),删除,没有不报错 clear()
intersection(),交集, = "&" difference(), = "-" A.difference(B),A的差集 = A-B union(), 并集 = "|" symmetric_difference,对称差集 = "^" A.symmetric_difference(B) = (A|B) - (A&B), 属于A或属于B的一部分 issuperset(),是否包含其他集合 issubset(),是否属于子集 isdisjoint(),是否不相交 intersection_update(),把交集结果赋给集合 difference_update(), symmetric_difference_update(),

浙公网安备 33010602011771号