second day--数据类型
Posted yuyou123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了second day--数据类型相关的知识,希望对你有一定的参考价值。
一、int
# bit_length表示二进制的有效位数
i1=3 i2=4 print(i1.bit_length(),i2.bit_length()) #2 3
二、bool
""" int ---> str :str(int) str ---> int :int(str) str必须全部是数字组成。 int --- > bool 0 False 非零 True bool ---> int int(True) 1 int(False) 0 str ---> bool ‘‘ False 非空字符串 True """ # print(int(True)) #1 # print(bool("")) # False
三、str
1.索引、切片、步长
1 # s=‘python自动化运维21期‘ 2 # s1=s[0:6] 3 # print(s1) 4 # s2=s[-1:-5:-1] 5 # print(s2) 6 # s3=s[::2] 7 # print(s3)
注意:
#切片
# s[起始索引:结束索引+1:步长]
# s1 = s[:6] #顾头不顾腚
# s5 = s[-1:-5:-1] #倒着取值,必须加反向步长
2.字符串方法
1.首字母大写,其他字母小写
1 s = ‘oldBoy‘ 2 # * capitalize 首字母大写,其他字母小写 3 # s1 = s.capitalize() 4 # print(s1)
2.全部大写upper() 全部小写lower()
1 # code = ‘QeAr‘.upper() 2 # your_code = input(‘请输入验证码:‘).upper() 3 # if your_code == code: 4 # print(‘验证成功‘)
3.大小写反转 swapcase()
4.*非字母的元素隔开的每个单词首字母大写 title()
1 *非字母的元素隔开的每个单词首字母大写 title() 2 # s = ‘alex wusir*oldboy3taibia‘ 3 # s5 = s.title() # Alex Wusir*Oldboy3Taibia 4 # print(s5)
5.center 居中,长度自己设定,默认填充物None,也可指定
1 s6 = s.center(30) 2 # s6 = s.center(30,"*") 3 # print(s6)
6.startswith endswith 判断不同的业务逻辑
1 s = ‘oldBoy‘ 2 # *** startswith endswith 3 # s7 = s.startswith(‘o‘) 4 # s7 = s.startswith(‘ol‘) 5 # s7 = s.startswith(‘oldBoy‘) 6 # s7 = s.startswith(‘Bo‘,3,5) 7 # print(s7)
7.strip 去掉收尾空格!!! 制表符 \t 换行符\n
# 用途:验证误输入空格,input(‘>>>: ‘).strip()
# 去想去的任何元素;;;迭代去重,包含就去掉
# 只去前面:lstrip() 只去右边rstrip()
# s = ‘tyoyldBoyrte‘ # *** strip 去除首尾的空格,制表符\t,换行符。不仅仅是去除空格.... #lstrip() rstrip() # print(s) # s8 = s.strip() # print(s8) # s81 = s.strip(‘t‘) # print(s81) # s81 = s.strip(‘tey‘) # print(s81) # name = input(‘>>>‘).strip() # if name == ‘oldboy‘: # print(‘验证成功‘)
8.s.split() very imporant str----> list
# 可以任何形式隔开 被隔元素清除,注意例子中空字符
# 可设置次数切割
1 #*** split (str ---> list) 2 # s1 = ‘oldboy,wusir,alex‘ 3 # s = ‘oldboywusiroalex‘ 4 # l = s.split() 5 # print(l) 6 # l = s1.split(‘,‘) 7 # print(l) 8 # l2 = s.split(‘o‘) # [‘‘, ‘ldb‘, ‘ywusir‘, ‘alex‘] 9 # print(l2) 10 11 # l2 = s.split(‘o‘,1) # [‘‘, ‘ldboywusiroalex‘] 12 # print(l2)
9.join 字符串类型的 iterable 可迭代的
# 可操作字符串、元祖、列表
# s1=‘+‘.join(s)
# 例子,,,list--->str
# s = ‘oldBoy‘ #join 将list --->str # s9 = ‘+‘.join(s) # s9 = ‘_‘.join(s) # print(s9) # l1 = [‘oldboy‘,‘wusir‘,‘alex‘] # s91 = ‘_‘.join(l1) # print(s91)
10.replace 替换
# s = ‘大铁锤fdsalj铁锤妹妹范德萨‘ # #replace # s10 = s.replace(‘铁锤‘,‘钢蛋‘) # print(s10)
11.find 通过元素找索引,找不到返回-1 较好
# 返回正向索引
# index 通过元素找索引 ,找不到会报错
s = ‘oldBoy‘ #find 通过元素找索引 找不到返回-1 # index 通过元素找索引 找不到报错 # ind = s.find(‘d‘) # print(ind) # ind = s.find(‘o‘) # print(ind) # ind = s.find(‘A‘) # print(ind) # ind = s.index(‘A‘) # print(ind)
12.格式化输出format
#格式化输出format # res=‘我叫{}今年{}岁,爱好{}‘.format(‘egon‘,18,‘male‘) # print(res) # res=‘我叫{0}今年{1}岁,爱好{2},我依然叫{0}‘.format(‘egon‘,18,‘male‘) # print(res) # res=‘{name} {age} {sex}‘.format(sex=‘male‘, name=‘egon‘, age=18) # print(res)
13.公共方法: len count
# [] ,() ,str都可用
# s = ‘fdsafsdagsdafjdskahdhjlsadhfkj‘ # print(len(s)) # s = ‘fdsadd‘ # print(s.count(‘d‘))
14.is系列
# name=‘lijie123‘
# print(name.isalnum()) #字符串由字母或数字组成
# print(name.isalpha()) #字符串只由字母组成
# print(name.isdigit()) #字符串只由数字组成
# name = ‘jinxin123‘ # print(name.isalnum()) #字符串由字母或数字组成 # print(name.isalpha()) #字符串只由字母组成 # print(name.isdigit()) #字符串只由数字组成 # i = ‘123a‘ # if i.isdigit(): # i = int(i) # else: # print("输入有误...")
四、list
存储大量的数据类型
1.有序、索引、切片
# li = [111,‘alex‘,222,‘wusir‘] # print(li[1]) # alex # print(li[-1]) # wusir # print(li[:2]) # [111, ‘alex‘] # print(li[:3:2])
2.增--append()、insert、extend
1 l = [‘老男孩‘, ‘alex‘, ‘wusir‘, ‘taibai‘, ‘ritian‘] 2 # 增 3 # append()在最后增加 4 # l.append(‘dg‘) 5 # print(l) 6 # # insert插入,可指定位置 7 # l.insert(1,‘zz‘) 8 # print(l) 9 # extend 迭代着增加 分解着添加 10 # l.extend([1,2,3,4]) 11 # print(l)
3.删除--pop、remove、clear、del
1 # # #删 2 # # pop() 有返回值,按照索引去删除,返回删除的内容 3 # l.pop(1) 4 # print(l) 5 # # remove() 按照元素去删除 6 # l.remove(‘wusir‘) 7 # print(l) 8 # # clear 清空列表内容 9 # l.clear() 10 # print(l) 11 # del l,在内存中删除列表 ;按索引删除 12 # del l 13 # print(l) 14 # 切片删除 del l[:3] #删除列表中前三个元素 15 # del l[1:3] 16 # print(l)
4.改--按索引、按切片
# #改 # 按照索引改l[2]=‘123‘ # l[1]=‘123‘ # print(l) # 按照切片去改:切片内容删除+以最小元素增加 # l[1:3]=‘ale‘ # print(l)
5.查---按照索引去查询,按照切片去查询
l = [‘老男孩‘, ‘alex‘, ‘wusir‘, ‘taibai‘, ‘ritian‘] # # 查 # 按照索引查询 # 按照切片查询 # 循环 for i in l: print(i)
6. 其它方法:
# 1.count计数
# 2.len()长度
# 3.index 通过元素找索引 ,第一个就返回
# 4.sort()从小到大排序
# sort(reverse=True) 从大到小排序
# 5.reverse() 倒序
l=[1,2,1,4,6,2,5,7] # print(l.count(3)) # print(len(l)) # print(l.index(2)) # l.sort() # print(l) # l.sort(reverse=True) # print(l) print(l.reverse()) #None l.reverse() print(l)
7.列表的嵌套
# l1 = [1, 2, ‘alex‘, ‘wusir‘,[‘oldboy‘, ‘ritian‘, 10], ‘taibai‘] #1,将‘alex‘全部变成大写,放回原处。 # l1[2] = ‘ALEX‘ # print(l1[2].upper()) # l1[2] = l1[2].upper() # print(l1) #2.给[‘oldboy‘, ‘ritian‘, 99] 追加一个元素‘女神’。 一个方法 # l1[-2].append(‘女财神‘) # print(l1) #3,将‘ritian‘首字母大写,放回原处。 # l1[-2][1] = l1[-2][1].capitalize() # print(l1) #4,将10通过数字相加,或者字符串相加或者等等,变成‘100‘ # l1[-2][-1] = str(l1[-2][-1] + 90) # print(l1) # l1[-2][-1] = str(l1[-2][-1]) + ‘0‘ # print(l1)
五、dict
1.字典的key是唯一的。
字典的key是唯一的。key 必须是不可变的数据类型。 key:不可变的数据类型(可哈希):str,bool,tuple,int。 value:任意数据类型。 数据类型分类: 不可变的数据类型(可哈希):str,bool,tuple,int 可变的数据类型:dict,list,set。 容器类数据类型:list,tuple,dict,set. 字典:存储数据多,关系型数据,查询速度快(二分查找)。 3.6版本之前,字典是无序的,3.6之后字典是有序的。
2.增--直接添加或setdefault
增 、 # dic[‘sex‘]=‘male‘ # dic.setdefault(‘name‘,123) # print(dic) # dic[‘high‘]=180 #有则覆盖,无则添加 # dic.setdefault(‘name‘,‘日‘) #有则不变,无则添加
3.删---pop、clear、popitem、del
# # 删、 # dic.pop(‘name‘) 有返回值,对应的值 # dic.pop(‘name1‘,None) # dic.clear() # del dic # print(dic) # # dic.clear() #清空 # del dic #删除,,, # # 按照键去删除 # del dic[‘age‘] # # dic.popitem() 随机删除,有返回值,返回删除的内容,放在元祖中 # dic.pop(‘name1‘,‘没有‘) # print(dic) # dic.pop(‘name1‘,‘没有此key‘) #常用,避免报错
4.改---直接修改,update
# 改 # dic[‘name‘] = ‘老男孩‘ # print(dic) # dic = {"name":"jin","age":18,"sex":"male"} # dic2 = {"name":"alex","weight":75} # dic2.update(dic) # 将dic的键值对覆盖添加到dic2中,dic不变。 # print(dic) # print(dic2)
5.查---get
#查 # print(dic[‘name2‘]) # print(dic.get(‘name‘)) # print(dic.get(‘name1‘)) # print(dic.get(‘name1‘,‘没有此key,sb‘))
6.keys() values() items()三种方法
#keys() values() items() # print(list(dic.keys())) # for i in dic.keys(): # print(i) # print(dic.values()) # for i in dic.values(): # print(i) # print(list(dic.items())) # for i in dic.items(): # print(i) # for i in dic.items(): # print(i) # # for k,v in dic.items(): # print(k,v) #分别赋值 # a,b = 1,2 # a,b,c = [‘alex‘, ‘wusir‘, ‘ritain‘] # print(a,b,c) # a = 1 # b = 5 # a,b = b,a # print(a,b) # len(dic) 键值对的个数 # fromkeys 创建字典 dic1 = dict.fromkeys(‘abc‘,‘张三‘) dic2= dict.fromkeys([1,2,3],‘李四‘) print(dic1) #注意:全部都追加 # dic3 = dict.fromkeys(‘abc‘,[]) # # print(dic3) # dic3[‘a‘].append(‘老男孩‘) # print(dic3)
7.字典的嵌套
1 dic = { 2 ‘name_list‘:[‘b哥‘, ‘张帝‘, ‘人帅‘, ‘kitty‘], 3 ‘老男孩‘:{ 4 ‘name‘:‘老男孩‘, 5 ‘age‘: 46, 6 ‘sex‘: ‘ladyboy‘, 7 }, 8 } 9 #1,[‘b哥‘, ‘张帝‘, ‘人帅‘, ‘kitty‘]追加一个元素,‘骑兵‘ 10 # dic[‘name_list‘].append(‘骑兵‘) 11 # print(dic) 12 #2,将kitty全部变成大写。 13 # l1 = dic[‘name_list‘] 14 # print(l1[-1].upper()) 15 # l1[-1] = l1[-1].upper() 16 # print(dic) 17 # dic[‘name_list‘][-1] = dic[‘name_list‘][-1].upper() 18 # print(dic) 19 20 #3,将老男孩 改成oldboy。 21 # dic[‘老男孩‘][‘name‘] = ‘oldboy‘ 22 # print(dic) 23 #,将ladyboy首字母大写。 24 # dic[‘老男孩‘][‘sex‘] = dic[‘老男孩‘][‘sex‘].capitalize() 25 # print(dic)
六、tuple
# 元祖 主要用于查 ;儿子不能改,孙子级别可以修改
# 索引、切片、步长
#索引index
# count len
# tu = (11,2,True,[2,3,4],‘alex‘) # # for i in tu: # # print(i) # # print(tu[1]) # # print(tu[:3:2]) # # print(tu.index(True)) # # print(tu.count(2)) # # print(len(tu)) # tu[-2].append(666) # print(tu)
七、set
集合:无序,不重复的数据类型。它里面的元素必须是可哈希的。但是集合本身是不可哈希的。
1:关系测试。交集并集,子集,差集....
2,去重。(列表的去重)
set1 = {1,‘alex‘,False,(1,2,3)} # l1 = [1,1,2,2,3,3,4,5,6,6] # l2 = list(set(l1)) # print(l2)
1.增--add,update(以小元素的方式增)无序
# set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘} # 增 # set1.add(‘666‘) # print(set1) # update # set1.update(‘abc‘) # print(set1) #{‘alex‘, ‘barry‘, ‘a‘, ‘c‘, ‘wusir‘, ‘egon‘, ‘b‘, ‘ritian‘}
2.删---remove、pop、clear、del set删除不常用
#删 # set1 = {‘alex‘,‘wusir‘,‘ritian‘,‘egon‘,‘barry‘} # set1.remove(‘alex‘) # 删除一个元素 # print(set1) # set1.pop() # 随机删除一个元素 # print(set1) # # set1.clear() # 清空集合 # print(set1) # # del set1 # 删除集合 # print(set1)
3.集合间操作
交集& 并集 | 差集- 反交集^ 子集和超集
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 4 #交集 & intersectio 5 # print(set1 & set2) 6 # print(set1.intersection(set2)) 7 8 #并集 | union 9 # print(set1 | set2) 10 # print(set1.union(set2)) 11 12 #差集 - difference 13 # print(set1 - set2) 14 # print(set1.difference(set2)) 15 16 #反交集 ^ symmetric_difference 17 # print(set1 ^ set2) 18 # print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8} 19 # set1 = {1,2,3} 20 # set2 = {1,2,3,4,5,6} 21 22 # print(set1 < set2) 23 # print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。 24 25 # print(set2 > set1) 26 # print(set2.issuperset(set1))
4.frozenset不可变集合,让集合变成不可变类型。
s = frozenset(‘barry‘) print(s,type(s)) # frozenset({‘a‘, ‘y‘, ‘b‘, ‘r‘}) <class ‘frozenset‘>
八、数据类型补充
#再循环一个列表时,不要对列表进行删除的动作(改变列表元素的个数动作),会出错
# dict 再循环字典时,不要改变字典的大小。
#tu 如果元组里面只有一个元素并且没有逗号隔开,那么他的数据类型与该元素一致。
1 l1 = [‘alex‘, ‘wusir‘, ‘taibai‘, ‘barry‘, ‘老男孩‘] 2 #删除奇数位 正确 3 # del l1[1::2] 4 # print(l1) 5 6 7 #再循环一个列表时,不要对列表进行删除操作(改变列表元素个数),会出错 8 #error: 9 # for i in l1: 10 # if l1.index(i)%2==1: 11 # del l1[l1.index(i)] 12 # print(l1) 13 # 14 # for i in range(len(l1)) : 15 # if i%2==1: 16 # del l1[i] 17 # print(l1) 18 # 19 #可采用倒着删除 --√ 20 # for i in range(len(l1)-1,-1,-1): 21 # if i%2==1: 22 # del l1[i] 23 # print(l1) 24 # 25 26 #range 可定制的数字列表 27 # for i in range(10): 28 # print(i) 29 # for i in range(1,10): 30 # print(i) 31 # for i in range(1,10,2): 32 # print(i) 33 34 # for i in range(10,1,-1): 35 # print(i) 36 #删除含k元素的键值对 37 #再循环字典时,不要改变字典的大小(增加或删除) 38 dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘,‘r‘:666} 39 40 l1 =[] 41 for i in dic: 42 #print(i) 43 if ‘k‘in i: 44 l1.append(i) 45 for i in l1: 46 del dic[i] 47 print(dic) 48 49 50 #如果元祖里面只有一个元素,并且没有,隔开,那么数据类型与该元素一致 51 # tu1 = (1) 52 # print(tu1,type(tu1)) 53 # tu2 = (‘alex‘) 54 # print(tu2,type(tu2)) 55 # 56 # tu3 = ([‘alex‘,1,2]) 57 # print(tu3,type(tu3)) #[‘alex‘, 1, 2] <class ‘list‘>
九、小数据池
python中存在小数据池: str int
int -5~256 内的相同的数,全都指向一个内存地址,节省空间
str 单个字符*20以内都是同一个内存地址,只要字符串中含有非字母元素,那就不是一个内存地址
#id == is # a = ‘alex‘ # b = ‘alex‘ # print(a == b) # 数值 # print(a is b) # 内存地址 # print(id(a)) #python中 有小数据池的概念。 # int -5 ~256 的相同的数全都指向一个内存地址,节省空间。 # str:s = ‘a‘ * 20 以内都是同一个内存地址 #只要字符串含有非字母元素,那就不是一个内存地址
十、深浅copy
赋值运算,它们共用一个内存空间
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
1 #深浅copy 2 #赋值运算,它们共用一个列表 3 # a = [1,2,3] 4 # b = a 5 # a.append(666) 6 # print(a,b) 7 8 #浅copy 9 # l1 = [1,2,3] 10 # l2 = l1.copy() 11 # l1.append(666) 12 # print(l1,l2) 13 # print(id(l1),id(l2)) 14 15 # l1 = [1,2,3,[22,33]] 16 # l2 = l1.copy() 17 # l1[-1].append(666) 18 # print(l1,l2) 19 # print(id(l1[-1]),id(l2[-1])) 20 21 #对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始, 22 # 指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性 23 24 #深copy 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。 25 # import copy 26 # l1 = [1,2,3,[22,33]] 27 # l2 = copy.deepcopy(l1) 28 # l1[-1].append(666) 29 # print(l1,l2) 30 # print(id(l1[-1]),id(l2[-1]))
十一、编码
字符编码
1.不同编码的二进制是不能互相识别的
2.python3x str内部编码方式(内存)为unicode
但是,对于文件的存储和传输,不能用unicode---浪费空间
bytes 内部编码方式(内存)为非unicode(utf-8,gbk)
转化:
s=‘lijie‘
s2=s.encode(‘utf-8‘) #编码 str---->bytes
s3=s.encode(‘gbk‘)
print(s2)
ss=s2.decode(‘utf-8‘) #解码 bytes--->str
1 #对于英文 2 # s = ‘laonanhai‘ 3 # print(s,type(s)) 4 # 5 # s1 = b‘laonanhai‘ 6 # print(s1,type(s1)) 7 8 #对于中文: 9 # s = ‘中国‘ 10 # print(s,type(s)) 11 # 12 # s1 = b‘\xe4\xb8\xad\xe5\x9b\xbd‘ 13 # print(s1,type(s1)) 14 15 #转化 16 # s = ‘laonanhai‘ 17 # s2 = s.encode(‘utf-8‘) #str -->bytes encode 编码 18 # s3 = s.encode(‘gbk‘) 19 # print(s2,s3) 20 # s = ‘中国‘ 21 # s2 = s.encode(‘utf-8‘) #str -->bytes encode 编码 22 # # s3 = s.encode(‘gbk‘) 23 # # print(s2) #b‘\xe4\xb8\xad\xe5\x9b\xbd‘ 24 # # print(s3) #b‘\xd6\xd0\xb9\xfa‘ 25 # ss = s2.decode(‘utf-8‘) # bytes ---> str decode 解码 26 # print(ss) #中国
以上是关于second day--数据类型的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用dt.year(month/day/hour/minute/second)函数抽取dataframe日期数据列对应的年月日时分秒信息