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
bool

三、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)
capitalize

    2.全部大写upper() 全部小写lower()

1 # code = 'QeAr'.upper()
2 # your_code = input('请输入验证码:').upper()
3 # if your_code == code:
4 #     print('验证成功')
View Code

    3.大小写反转 swapcase()

     4.*非字母的元素隔开的每个单词首字母大写 title()

1 *非字母的元素隔开的每个单词首字母大写 title()
2 # s = 'alex wusir*oldboy3taibia'
3 # s5 = s.title()  # Alex Wusir*Oldboy3Taibia
4 # print(s5)
title

5.center 居中,长度自己设定,默认填充物None,也可指定

1 s6 = s.center(30)
2 # s6 = s.center(30,"*")
3 # print(s6)
title

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)
View Code

7.strip 去掉收尾空格!!! 制表符 换行符

# 用途:验证误输入空格,input('>>>: ').strip()
# 去想去的任何元素;;;迭代去重,包含就去掉
# 只去前面:lstrip() 只去右边rstrip()
# s = 'tyoyldBoyrte'
# *** strip 去除首尾的空格,制表符	,换行符。不仅仅是去除空格....
#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('验证成功')
strip 
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)
split
9.join   字符串类型的     iterable 可迭代的
# 可操作字符串、元祖、列表
# s1='+'.join(s)
# 例子,,,list--->str
'_'.join(iterable)  list(每个元素必须是str) --> str
# s = 'oldBoy'
#join 将list --->str
# s9 = '+'.join(s)
# s9 = '_'.join(s)
# print(s9)
# l1 = ['oldboy','wusir','alex']
# s91 = '_'.join(l1)
# print(s91)
join
10.replace 替换
# s = '大铁锤fdsalj铁锤妹妹范德萨'
# #replace
# s10 = s.replace('铁锤','钢蛋')
# print(s10)
replace
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)
find
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)
format
13.公共方法:   len    count
# [] ,() ,str都可用
# s = 'fdsafsdagsdafjdskahdhjlsadhfkj'
# print(len(s))
# s = 'fdsadd'
# print(s.count('d'))
View Code
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("输入有误...")
View Code

四、list

存储大量的数据类型
1.有序、索引、切片
# li = [111,'alex',222,'wusir']
# print(li[1])  # alex
# print(li[-1])  # wusir
# print(li[:2])  # [111, 'alex']
# print(li[:3:2])
View Code

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)
list add

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)
list--删除

4.改--按索引、按切片

# #改
# 按照索引改l[2]='123'
# l[1]='123'
# print(l)
# 按照切片去改:切片内容删除+以最小元素增加
# l[1:3]='ale'
# print(l)
list--改

5.查---按照索引去查询,按照切片去查询

l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian']
# # 查
# 按照索引查询
# 按照切片查询
# 循环
for i in l:
    print(i)
list--查

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)
View Code

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','')  #有则不变,无则添加
dic-增

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')   #常用,避免报错
dic--删除

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)
View Code
fromkeys结果:
{'a': '张三', 'b': '张三', 'c': '张三'}
{1: '李四', 2: '李四', 3: '李四'}
{'a': [], 'b': [], 'c': []}
{'a': ['老男孩'], 'b': ['老男孩'], 'c': ['老男孩']}

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)
View Code

七、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'}
set--增

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)
set---删除

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))
View Code

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'>
View Code

九、小数据池

    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 以内都是同一个内存地址
    #只要字符串含有非字母元素,那就不是一个内存地址
View Code

十、深浅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]))
copy

十一、编码

字符编码
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'xe4xb8xadxe5x9bxbd'
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'xe4xb8xadxe5x9bxbd'
24 # # print(s3)   #b'xd6xd0xb9xfa'
25 # ss = s2.decode('utf-8')  # bytes ---> str decode 解码
26 # print(ss)   #中国
编码

 

 
 
 
 
原文地址:https://www.cnblogs.com/lijie123/p/8746944.html