博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python常见数据类型及操作
阅读量:5150 次
发布时间:2019-06-13

本文共 6816 字,大约阅读时间需要 22 分钟。

基础数据类型

什么是数据类型?

我们人类可以很容易的分清数字与字符的区别,但计算机并不能,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的。

因此,在每个编程语言里都会有一个叫数据类型的东西,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。 

字符串

str(字符串) ‘1’ ” I',m a teacher “

python中,凡是用引号(单引、双引),引起来的内容都是字符串。

字符串常用操作:

s = 'I am from china'#首字母大写print(s.capitalize())I am from china#全大写print(s.upper())I AM FROM CHINA#全小写print(s.lower())i am from china#大小写反转print(s.swapcase())i AM FROM CHINA#所有首字母大写print(s.title())I Am From China#计算字符串长度print(len(s))15#内容居中,两边填充(共50个字符串,多余的用~填充,默认填充符是空格)print(s.center(50,'~'))~~~~~~~~~~~~~~~~~I am from china~~~~~~~~~~~~~~~~~~#判断字符串以什么开始print(s.startswith('I'))True#判断字符串以什么结尾print(s.endswith('I'))False#查询字符串是否含有某元素,找到返回元素对应下标,找不到返回-1print(s.find('a'))2 

比较重要的几个方法:

s='  Chi nese '#删除前后空格print(s.strip())Chi nese#删除后面的空格print(s.rstrip())  Chi nese#删除前面的空格print(s.lstrip())Chi nese #统计元素个数print(s.count('e'))2#将字符串以元素中内容分割为列表print(s.split())['Chi', 'nese']print(s.split('e'))['  Chi n', 's', ' ']

切片:

切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾头不顾尾)
a = 'ABCDEFGHIJK'print(a[0:3])ABCprint(a[2:5])CDE#默认到最后print(a[0:])ABCDEFGHIJK# -1 是列表中最后一个元素的索引,但是要满足顾头不顾腚的原则,所以取不到K元素print(a[0:-1])ABCDEFGHIJ#加步长print(a[0:5:2]) ACE#反向加步长print(a[5:0:-2]) FDB  

索引:

索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推
a = 'ABCDEFGHIJK'print(a[0])print(a[3])print(a[5])print(a[7])#输出ADFH

补充:

字符串计算

#相加,即拼接 : +a = 'hello 'b = 'world'print(a+b)#输出hello world#与数字相乘: * print('hello '*4)#输出hello hello hello hell

字符串替换

#将重新替换为你,如果后面不跟次数,默认替换所有s = '重新打开一个终端窗口,重新打开一个终端窗口's1 =s.replace('重新','你',1)print(s1)你打开一个终端窗口,重新打开一个终端窗口

字符串判断

print("hahaha".isalpha())       #判断是不是字母print("hahaha123".isalnum())    #判断是不是阿拉伯数字print(u"23".isdecimal())        #判断是否只包含十进制字符,定义十进制在字符串前加'u'即可print("2".isdigit())            #判断是否整数print("al_ex".isidentifier())   #判断是否合法的变量名print("alex".islower())         #判断是否全为小写print("Alex".isupper())         #判断是否全为大写

字符串循环

name='Love1'for i in name:    print(i)#输出Love1

 整型

int(整型) 18,23 常用于计算。

在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型)

理论上Python没有限制长整数大小,实际由于机器内存有限,数值不会无限大

注意:在Python3里不再有long类型了,全都是int

float(浮点型)

扫盲  

浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

complex(复数) 

复数是由实数部分和虚数部分组成,一般是x+yj形式,其中x为复数的实数部分,y为复数的虚数部分

用来测磁场、量子力学之类的,很少用到。

数字在pycharm 中的表现形式: 

加引号的数字是 字符串;不加引号的数字是 “数字”,红色的

布尔值

bool(布尔值)

只有真或假两种状态,性别、命题真假,常用于判断。

真   1   True

假   0   False

列表

列表是python中的基础数据类型之一,它是以[ ]括起来,每个元素以逗号隔开,而且可以存放各种数据类型。

列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。列表是有序的,有索引值,可切片,方便取值。

列表常用方法:

索引、切片同字符串。

增加

li = [1,'a','b',2,3,'a']#按照索引去增加li.insert(0,55)print(li)[55, 1, 'a', 'b', 2, 3, 'a']#默认增加到最后一个元素li.append('aaa')print(li)[1, 'a', 'b', 2, 3, 'a', 'aaa']#增加一个列表到最后一个元素li.append([1,2,3])print(li)[1, 'a', 'b', 2, 3, 'a', [1, 2, 3]]#迭代增,会将内容分解到最小元素li.extend('abc')print(li)[1, 'a', 'b', 2, 3, 'a', 'a', 'b', 'c']

 删除

li = [1,'a','b',2,3,'a']#按索引删除li.pop(0)print(li)['a', 'b', 2, 3, 'a']#默认删除最后一个li.pop()print(li)[1, 'a', 'b', 2, 3]#按元素删除li.remove('a')print(li)[1, 'b', 2, 3, 'a']#清空列表li.clear()print(li)[]#直接删除列表del liprint(li)NameError: name 'li' is not defined#切片去删除del li[0:2]print(li)['b', 2, 3, 'a']

 修改

li = [1,'a','b',2,3,'a']#按索引修改li[0] = '8'print(li)['8', 'a', 'b', 2, 3, 'a']#切片修改,按迭代处理,内容会分解到最小元素都加进去li[0:2]='hello'print(li)['h', 'e', 'l', 'l', 'o', 'b', 2, 3, 'a']

 查询

li = [1,'a','b',2,3,'a']#遍历查询for i in li:    print(i)1ab23a#测量长度l=len(li)print(l)6#统计次数print(li.count('a'))2#查索引print(li.index('b'))2

 排序

li = [1, 5, 7, 2, 3, 4]#正排序li.sort()print(li)[1, 2, 3, 4, 5, 7]#倒排序li.sort(reverse=True)print(li)[7, 5, 4, 3, 2, 1]#反转li.reverse()print(li)[4, 3, 2, 7, 5, 1]

元组

数据只读,也叫做只读列表。

元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。例:(1,2,3)("a","b","c")

字典 

字典一种key - value 的数据类型,使用就像我们小时候用的字典,通过部首、拼音来查对应页的详细内容。 

字典的特性: 字典是无序的; key必须是唯一的,so天生去重。 
字典里面的key是唯一的,所以不用索引表 
如何实现唯一?

hash 中文名:散列 通过一定的数学算法,使字符串能变成唯一的数字序列

 增删改查

names = {    "stu1101" :{
"name":"Alex","age":22,"hobbie":"girl"}, "stu1102" : "Jack", "stu1103" : "rain",}print(names)#查询print(names["stu1101"])print(names["stu1101"]["hobbie"])#判断key-"stu1104"是否存在,如果存在返回值,如果否返回none;也可以自定义返回内容,此处为noprint(names.get("stu1104","no"))#增加names["stu1104"] = ["Rose",23,"DBA"]print(names["stu1104"])#修改names["stu1104"][0] = "Violet"print(names["stu1104"])#删除print(names.pop("stu1105","不存在"))del names["stu1103"]print(names)#输出{
'stu1103': 'rain', 'stu1102': 'Jack', 'stu1101': {
'age': 22, 'name': 'Alex', 'hobbie': 'girl'}}{
'age': 22, 'name': 'Alex', 'hobbie': 'girl'}girlno['Rose', 23, 'DBA']['Violet', 23, 'DBA']不存在{
'stu1104': ['Violet', 23, 'DBA'], 'stu1102': 'Jack', 'stu1101': {
'age': 22, 'name': 'Alex', 'hobbie': 'girl'}}

循环

names = {    "stu1101":{
"name":"Alex","age":22,"hobbie":"girl"}, "stu1102": "Jack", "stu1103": "rain", "stu1104":{
"Rose",23,"DBA"}}#字典循环常用的两种方式:打印出key和value# @1 尽量用这种,效率高for key in names: print(key,names[key])# @2 先将字典转为列表,再进行循环,效率低print(names.items())for k,v in names.items(): print(k,v)print(names.keys()) #打印所有keyprint(names.values()) #打印所有value#先获取这个值,如果存在就打印,不存在就创建print(names.setdefault("stu1106","Mary"))print(names)#字典合并 相当于修改1102的值,因为字典中的key是唯一的name1 = {
"stu1102":"Java",1:333,2:444}names.update(name1)print(names)#输出stu1103 rainstu1101 {
'name': 'Alex', 'age': 22, 'hobbie': 'girl'}stu1102 Jackstu1104 {
'Rose', 'DBA', 23}dict_keys(['stu1103', 'stu1101', 'stu1104', 'stu1102'])dict_values(['rain', {
'name': 'Alex', 'hobbie': 'girl', 'age': 22}, {
'DBA', 'Rose', 23}, 'Jack'])Mary{
'stu1103': 'rain', 'stu1101': {
'hobbie': 'girl', 'age': 22, 'name': 'Alex'}, 'stu1106': 'Mary', 'stu1104': {
'Rose', 'DBA', 23}, 'stu1102': 'Jack'}{
1: 333, 'stu1106': 'Mary', 2: 444, 'stu1104': {
'Rose', 'DBA', 23}, 'stu1103': 'rain', 'stu1102': 'Java', 'stu1101': {
'hobbie': 'girl', 'age': 22, 'name': 'Alex'}}

字典中的深浅copy

names = {    "stu1101":{
"name":"Alex","age":22}, "stu1102": "Jack", "stu1103": "rain", "stu1104":{
"Rose",23,"DBA"}}name1 = names.copy()#第一层的数据不会变,其他的都会变。应用场景:银行共享账户:主卡、副卡names["stu1103"] = "RAIN" #此处相当于开辟了一块新的内存地址,所以names中的rain会改变names["stu1101"]["age"] = 24 #此处只是修改了列表中的数据,而列表的内存地址没有改变,所以打印出的names和name1内容会相同print(names)print(name1)#深copy, 完全copyimport copyname2 = copy.deepcopy(names)print(name2)#输出{
'stu1103': 'RAIN', 'stu1102': 'Jack', 'stu1101': {
'age': 24, 'name': 'Alex'}, 'stu1104': {
'DBA', 'Rose', 23}}{
'stu1101': {
'age': 24, 'name': 'Alex'}, 'stu1102': 'Jack', 'stu1103': 'rain', 'stu1104': {
'DBA', 'Rose', 23}}{
'stu1101': {
'age': 24, 'name': 'Alex'}, 'stu1102': 'Jack', 'stu1103': 'RAIN', 'stu1104': {
'DBA', 'Rose', 23}}

 

转载于:https://www.cnblogs.com/zhaomeng/p/10989442.html

你可能感兴趣的文章
【Linux】ping命令详解
查看>>
Oracle中包的创建
查看>>
关于PHP会话:session和cookie
查看>>
jQuery on(),live(),trigger()
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
导航,头部,CSS基础
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
gzip
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
注解小结
查看>>
list control控件的一些操作
查看>>
判断字符串在字符串中
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>