python中day_Python中的数据类型

Python中的数据类型

一、数字

1、int(整型)

长整数:不过是大一些的整数。。

跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。2、float(浮点型)

浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。3、complex(复数)复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

注:Python中存在小数字池:-5~257

二、字节(bytes):

Pthon3对文本和二进制数据做了更为清晰的区分,文本是Unicode,由str表示,二进制数据由bytes类型表示;python3不会以任意隐式方式混用str和bytes,不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。

字节和字符的转化#!/usr/bin/env python

# Author:dayi123

msg = "刘毅"

print(msg.encode())

print(b'\xe5\x88\x98\xe6\xaf\x85'.decode())

三、布尔值:

真或假1或0

四、字符串

1、万恶的字符串拼接:

python中的字符串是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空间,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

2、字符串格式化输出:name = "dayi123"

print "i am %s " % name

#输出: i am alex

PS:字符串是 %s;整数 %d;浮点数%f

3、字符串的操作:

(1)、字符串常用功能:移除空白、分割、长度、索引、切片

(2)、字符串的操作

1)去掉空白:username = input("user:")

if username.strip() == "dayi123":           #strip 移除空白

print("welcome")

2)字符串分割name= "dayi123,dayi,liuyi"

name2 = name.split(",")           #将name转化为列表并赋值给name2

print(name2)

print("|".join(name2))            #强name2列表转化为字符串,以“|”分割

job = "liuyi"

print('' in job)                   #判断“job”是不是字符串

print(job.capitalize())            #强”job”中字符串分割打印出来

msg = "hello,{job},it's been a long {age} since time sopken...."

#msg2 = msg.format(job='dayi',age=22)

#print(msg2)                        #打印通过msg格式化后的字符串

msg2 = "hello{0},dddd{1}"

print(msg2.format('dayi',22))        #直接格式化后打印出来

3)字符串切片:name = "liu yi"

print(name[2:4])                      #打印第二到第三个字符串

print(name.center(40,'-'))              #打印name中40个字符串,不够则以“—”填充

print(name.find('l'))                   #查找“l”是第几个字符

4)判断输入的是不是数字:age =input("your age:")

if age.isdigit():                       #判断输入的是不是数字

age = int(age)

print("your age:",age)

else:

print("invalid data type")

5)判断字符串:name= 'daf!df34'

print(name.isalnum())                 #判断输入的字符串中有没有特殊符号

print(name.endswith('df'))             #判断输入的字符串是不是以“df”结尾

print(name.startswith('da'))            #判断输入的字符串是不是以“da”开头

print(name.upper().upper())           #” upper()”将所有的字符串转化成大写

print(name.upper().lower())            #” lower()”将所有的字符串转化成小写

五、列表

1创建列表:name_list = ['alex', 'seven', 'eric']     #列表里面可以存任何东西

name_list = list(['alex', 'seven', 'eric'])

2、列表基本操作:索引、切片、追加、删除、长度、切片、循环、包含

3、列表操作:

(1)索引和切片操作:

>>> age = 34

>>> name =["dayi123",34,"liu",35,age] #创建一个列表,可以包括字符串、数字及变量

>>> name[0:2]#取列表中第0个元素到第1个元素

['dayi123', 34]

>>> name[-3:-1]#取列表中倒数第2个到倒数第3个元素

['liu', 35]

>>> name[-3:]

['liu', 35, 34]

>>> name[:3]#取列表中前三个元素

['dayi123', 34, 'liu']

>>> name[:4][1:3]#取列表中前四个元素,再取前四个元素的1到2个元素

[34, 'liu']

>>> name[:4][1:3][1]

'liu'

>>> name[:4][1:3][1][1]#切片,取字符

'i'

(2)更改数据操作:

>>> name[2] = "liuyi"#更改列表中第二个元素的值,更改为“liuyi”

>>> name

['dayi123', 34, 'liuyi', 35, 34]

(3)插入及追加操作:

>>> name.insert(4,'dayi')#在第4个元素处插入“dayi”

>>> name

['dayi123', 34, 'liuyi', 35, 'dayi', 34]

>>> name.append("day")#在结尾插入一个元素”day”

>>> name

['dayi123', 34, 'liuyi', 35, 'dayi', 34, 'day']

(4)删除操作

>>> name.remove("day")#删除列表中的元素”day”

>>> name

['dayi123', 34, 'liuyi', 35, 'dayi', 34]

>>> del name[2:4]#删除第2个元素到第3个元素

>>> name

['dayi123', 34, 'dayi', 34]

>>> del name#删除整个列表

(5)判断列表中某个元素存在个数:name =["dayi123",34,"liu",35,3,34,3,4,5,6,7,8,9,0]

if 3 in name:                         #如果3存在列表name中

num_of_ele = name.count(3)        #判断3在列表name中的个数

print("[%s] 3 is/are in name" %num_of_ele)

(6)查找列表中的元素并更改值:name= ["dayi123",34,"liu",35,3,34,3,4,5,6,7,8,9,0]

#方法一:只能更改最先查找的元素的值

if 3in name:

num_of_ele = name.count(3)     #判断3在列表name中存在的个数

position_of_ele = name.index(3)  #获取3的下标,即3是列表中第几个元素

name[position_of_ele] = 3333    #更改下标为position_of_ele的元素值为3333

print("[%s] 3 is/are in name" %num_of_ele)

print(name)

#方法二:更改查找到所有元素的值

for i in range(name.count(3)):        #3存在几次则循环几次

ele_index = name.index(3)      #获取3的下标

name[ele_index] = 666         #更改值为666

print(name)

(7)把小列表追加到大列表:name = ["dayi123",34,"liu",35,3,34,3,4,5,6,7,8,9,0]

name2 = ["nihaoa",3344,55]

name.extend(name2)                #扩展进来一个新的列表,将name2扩展到name中

name.reverse()                    #反转列表

name.sort()                       #排序,Python3中如果同时存在字符串会报错

print(name)

(8)删除元素:

name.pop()#删除最最后一个元素name.pop(2)#删除最后一个元素

(9)复制列表:importcopy                                  #引入copy模块

name = [34,"dayi123",["liuyi",35,3],34,3,4,5,6,7,8,9,0]  #列表中还可以包含列表

name3 =name.copy()                           #将name列表再复制一份

name4 =copy.copy(name)                      #通过引入copy模块在复制一份copy模块

name5 =copy.deepcopy(name)                  #通过” deepcopy”深度复制一份name列表

name[1] = "Dayi123"                          #更改列表中第一个元素的值

name[2][2] =55555                            #更改列表中包含的列表中第二个元素的值

print(name)

print(name3)                                 #列表中的列表时存在另一个内存空间中

print(name4)

print(name5)                                 #通过深度复制可以将列表中的列表复制出来

print(id(name),id(name3),id(name5))          #打印内存地址

print(id(name[2]),id(name3[2]),id(name5[2])) #通过打印内存地址可以看到copy到的列表中包含

的列表内存地址相等,deepcopy到的不相等

六、元组(不可变列表)

1、创建元组:ages = (11, 22, 33, 44, 55)

ages = tuple((11, 22, 33, 44, 55))

2、元组操作r = (1,2,3,4,5,6)     #只读列表,元组

#r[1] = 3          #不能修改,修改会报错

print(r)

七、字典(无序)

1、创建字典:person = {"name": "mr.wu", 'age': 18}

person = dict({"name": "mr.wu", 'age': 18})

2、常用操作:索引、新增、删除、(键、值、键值对)、循环、长度id_db= {                  #创建一个字典

456789123456789909: {

'name':"dayi123",

'age':34,

'add':"tainshui"

},

12345677890987678: {

'name':"liu",

'age':3,

'add':"gasu"

},

12345677890987678: {

'name':"liu",

'age':3,

'add':"gasu"

},

}

#print(id_db)                                 #字典中的值不能重复,所以只打印一次重复值

print(id_db[12345677890987678])               #打印‘12345677890987678’中的值

id_db[12345677890987678]['name'] = "liuyi"    #将’ 12345677890987678’值改为‘liuyi’

id_db[12345677890987678]['qq_of_wife'] = 110110110  #在‘12345677890987678’中新增值

print(id_db)

del id_db[12345677890987678]['add']           #删除‘12345677890987678’中的‘add’

print(id_db)

id_db[12345677890987678].pop("age")           #删除‘12345677890987678’中的‘age’

print(id_db)

v = id_db.get(12345677890987678)               #读取12345677890987678中的值,赋给“v”

print(v)

dic2 = {

'name':'haha',

456789123456789909: {

'name':"wangwang",

'age': 24,

'addr':'china'

},

}

id_db.update(dic2)       #根据dic2更新id_db的值

print(id_db)      #更新后,没有的值会增加,都存在的会根据dic2中的更改,dic中独有的不会变

print(id_db.items())     #将字典转化为列表

print(id_db.values())    #打印value值

print(id_db.keys())      #打印key值

print(456789123456789909 in id_db)   #判断列表中是否存在456789123456789909

print(id_db.setdefault(4567,"haha"))  #如果字典中存在4567则打印出来,不存在,就设置为haha

#把列表[1,2,34,5,6]中的值取出来当字典中的key,并赋值为"eee"

print(id_db.fromkeys([1,2,34,5,6],'eee'))

print(id_db.popitem())   #随机删除列表中键值

print(id_db)

#循环打印字典中key,value效率低,因为要有一个dict to list的转化过程

#for k,v in id_db.items():

#   print(k,v)

for key in id_db:            #效率高

print(key,id_db[key ])

八、set(集合、无序、不重复序列)

1创建集合

方法一、s1 ={11,12}

S2 = set()

方法二、set([11,12,13,14])

2操作集合

1)、创建、添加元素、清空集合s =set()        #创建空集合

s.add(123)       #给集合中添加一个元素

s.add(123)       #集合中元素不重复

print(s)s.clear()   #清除集合中元素print(s)

2)、更新操作:s1 ={11,22,33}

s2 = {22,33,44}

#print(s1.difference(s2))         #s1中存在s2中不存在的打印出来

#s3 = s1.symmetric_difference(s2) #s1中不存在的,s2中都不存在的都打印出来

#print(s3)

#s1.difference_update(s2) #查找s1中存在s2中不存在,将结果更新到s1中,s1中仅有仅s1中有的元素

#print(s1)

s1.symmetric_difference_update(s2)#将s1中s2中非共同元素移到s1中(s1中只有s1、s2非共同元素)

print(s1)

3)、集合中的删除操作:s1 = {11,22,33}

#s1.remove(11)   #移除一个元素,不存在没有提示

#print(s1)

#ret = s1.pop()   #移除一个元素,随机移除,  并获取移除元素,pop里面不能加参数

#print(ret)

s1.discard(22)    #如果不存在会有提示

print(s1.discard(333))

4)、交集、并集操作:s1 = {11,22,33}

s2 = {22,33,44}

s3 = s1.intersection(s2)      #获取s1和s2的交集

print(s3)

s1.intersection_update(s2)    #将交集更新至s1

print(s1)

s4 = s1.union(s2)             #并集操作

print(s4)

#li = [22,33,44,55,66]

li = "dayi123"

s2.update(li)                 #将可迭代的东西更新至s2,可以是列表,字典,字符串

print(s2)

3 python2中集合的用法

a & b  #求交集 a.intersection(b)

a | b  #求并集 a.union(b)

a– b # 求差集 a.difference(b)

a ^ b #求对称差集 a.symmetric_difference(b)

a.issubset(b)  #a是b 的子集

a.issuperset(b) # a是否包含b

九、字符的编码与解码

1、字符的编码与解码

(1)在python2默认编码是ASCII, python3里默认是unicode

(2)unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),utf-16就是现在最常用的unicode版本,不过在文件里存的还是utf-8,因为utf8省空间

(3)在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

2、python3的字符编码与解码

#!/usr/bin/envpython

# -*-coding:utf-8 -*-   #python不需要表明字符编码为utf-8,默认为utf-8

#Author:dayi123

s =" 刘毅"

t =s.encode("utf-8")   #将字符串解码成bytes

print(t)

y =t.decode("utf-8")   #将bytes编码为字符串

print(y)

x =s.encode('gbk')     #将utf格式字符串解码为gbk格式的bytes

print(x)

print(x.decode('gbk')) #将gbk格式的bytes编码为utf-8格式的字符串

3、python2的字符编码与解码

#!/usr/bin/envpython

#Author:dayi123

importsys

print(sys.getdefaultencoding())         #显示默认的字符编码

msg ="刘毅"

print(msg)

#将字符串解码为unicode再编码为gbk

msg_gb2312= msg.decode("utf-8").encode("gb2312")

print(msg_gb2312)

gb2312_to_gbk= msg_gb2312.decode("gbk").encode("gbk")

print(gb2312_to_gbk)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值