第二章 数据类型

Python3 基本数据类型

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:

实例(Python 3.0+)

#!/usr/bin/python3
counter = 100          # 整型变量
miles   = 1000.0       # 浮点型变量
name    = "runoob"     # 字符串

print (counter)
print (miles)
print (name)

执行以上程序会输出如下结果:

100
1000.0
runoob

一 标准数据类型

Python3 中有六个标准的数据类型:

  • Number(数字)

  • String(字符串)

  • List(列表)

  • Tuple(元组)[tʌpl]

  • Set(集合)

  • Dictionary(字典)[ˈdɪkʃəneri]

Number(数字)Python3 数字类型分为

  • int
  • float
  • bool
  • complex(复数)

在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
像大多数语言一样,数值类型的赋值和计算都是很直观的。
内置的 type() 函数可以用来查询变量所指的对象类型。

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

此外还可以用 isinstance 来判断:

>>>a = 111
>>> isinstance(a, int)
True
>>>

isinstance 和 type 的区别在于:

class A:
    pass

class B(A):
    pass

isinstance(A(), A)  # returns True
type(A()) == A      # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False

区别就是:

  • type()不会认为子类是一种父类类型。

  • isinstance()会认为子类是一种父类类型。

注意:

在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。

Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。

当你指定一个值时,Number 对象就会被创建:

var1 = 1
var2 = 10

您也可以使用del语句删除一些对象引用。

del语句的语法是:

del var1[,var2[,var3[....,varN]]]]

您可以通过使用del语句删除单个或多个对象。例如:

del var #不要将关键字命名为变量 否则会有问题 如 str
del var_a, var_b

注意:

  • Python可以同时为多个变量赋值,

  • #如:
    a, b = 1, 2 #对称赋值
    a, b, c, d = 'love'//a=l b=c 依次类推
    #统一赋值
    a = b = c = d = 10;
    
  • 一个变量可以通过赋值指向不同类型的对象。

  • 数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。

  • 在混合计算时,Python会把整型转换成为浮点数。

数值类型实例

int float complex
10 0.0(.2) 3.14j
100 15.20 45j
-786 -21.9 9.322e-36j

Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型

数值运行的函数 import match

match.ceil(x)

match.floor()

pow(x,y) x**y 运算后的值
round(x[,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
max(x1,x2,,,,) 返回给定参数的最大值,参数可以为序列
min(x1,x2,,,,) 返回给定参数的最小值,参数可以为序列
ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5
floor() 返回数字的下舍整数,如math.floor(4.9)返回 4

随机数的函数 import random

choice(seq) 返回一个列表,元组或字符串的随机项。 seq -- 可以是一个列表,元组或字符串。
choices(seq,k=1) 返回随机的k个值 random.choices('abcdefghijklmn',k=6))
randrange(start,stop,step) start -- 指定范围内的开始值,包含在范围内。 stop -- 指定范围内的结束值,不包含在范围内。 step -- 指定递增基数。
shuffle(list) 将列表的所有元素随机排序
uniform(x,y) 随机生成下一个实数,它在[x,y]范围内。
randint(1,100) 随机整数

序列 字符串 列表 元组的取值方式

截取的语法格式如下:

变量[头下标:尾下标]

索引值以 0 为开始值,-1 为从末尾的开始位置。
加号 (+) 是字符串的连接符, 星号 (*) 表示复制当前字符串,紧跟的数字为复制的次数。

二 String(字符串)

Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠()转义特殊字符。
字符串的截取的语法格式如下:

变量[头下标:尾下标]

索引值以 0 为开始值,-1 为从末尾的开始位置。
加号 (+) 是字符串的连接符, 星号 (*) 表示复制当前字符串,紧跟的数字为复制的次数。实例如下:

实例

str = 'Runoob' 
print (str)          # 输出字符串
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符
star[-3:-1]          # 输出倒数第三个至倒数第一个的字符
print (str[0])       # 输出字符串第一个字符
print (str[2:5])     # 输出从第三个开始到第五个的字符
print (str[2:])      # 输出从第三个开始的后的所有字符
print (str[:])       # 输出所有
print (str[:5])      # 截取到5为止
print (str * 2)      # 输出字符串两次
print (str + "TEST") # 连接字符串
str[-1:1:-1]             #范围查询,步长默认是1,如果步长为正,从左往右查询,如果步长为负,从右往左
str[-1::-1]          #输出所有 倒着输出

注意:

  • 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
  • 字符串可以用+运算符连接在一起,用*运算符重复。
  • Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
  • Python中的字符串不能改变。

字符串的转义字符

​ 在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:

\(在行尾时) 续行符 \\ 反斜杠符号
' 单引号 " 双引号
\n 换行 \r 回车
\t 水平制表符(4个空格)

续行符

myStr = 'abcde\
f'

格式化输出

%d %s %f 占位符
精确到小数点后3位,会四舍五入

print("num = %d, str19 = %s, f = %.3f" % (num, str19, f))
#%  '%%'输出一个单一的'%'
print("%-10.2f"%22.11111,'asdasd') #10 为10个长度 用做左对齐
print("%10.2f"%22.11111,'asdasd') #10 为10个长度 用做右对齐

当值为元组的时候则会报错

"hi there %s" % name

但是,如果name恰好是(1,2,3),它将会抛出一个TypeError异常.为了保证它总是正确的,你必须这样做:

"hi there %s" % (name,) # 提供一个单元素的数组而不是一个参数

使用format进行格式化

print("字符串{} 浮点数{} 整数{}".format('asd',11.1,8))

isnumeric() [nu:'merɪk] 如果字符串中只包含数字字符,则返回 True,否则返回 False
splitStr.join(Str) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
center(self,width,fillchar) 以原始字符串为中心生成新字符串
ljust(width,[str]) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
rjust(width,[str]) 返回一个原字符串右对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
lstrip()/rstrip()/strip 截掉字符串左/右边的空格或指定字符/俩侧
max(str)/min(str) 返回字符串 str 中最大/小的字母。
chr(x) 将一个整数转换为一个字符
ord(x) 将一个字符转换为它的整数值
myStr.replace(old,new[,max]) 把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。
find(str,beg=0,end=len)/index(str) 查找某个字符出现的位置 从左侧开始查找 查到返回索引值 查不到返回-1 /查到返回索引 查不到报错
rfind(str,beg=0,end=len)/rindex(str) 查找某个字符出现的位置 从右侧开始查找 查到返回索引值 查不到返回-1 /右查到返回索引 查不到报错
split(str=''[,num]) num=string.count(str)) 以 str 为分隔符拆分字符串为列表,如果 num 有指定值,则仅截取 num 个子字符串
swapcase() 将字符串中大写转换为小写,小写转换为大写
upper() 转换字符串中的小写字母为大写
lower() 转换字符串中的写字母为小写
splitlines(True) 以回车换行为条件分割,参数用来设置是否保留换行

三 List(列表)

List(列表) 是 Python 中使用最频繁的数据类型。

列表是写在方括号([])之间、用逗号分隔开的元素列表。

>>>a = [1, 2, 3, 4, 5, 6]
>>> a[-2] #5
>>> a[0] = 9    #修改值
>>> a[2:5] = [13, 14, 15]
>>> a
[9, 2, 13, 14, 15, 6]
>>> a[2:5] = []   # 删除
>>> del a[2]      # 删除 索引值为2的值
>>> a.clear()     # 清空列表
>>> a
[9, 2, 6]

#添加值
a.append(3) #添加一个值
a.extend([1,2,3,4]) #添加多个值

多维列表

mylist = [[1,2,3], [4,5,6], [7,8,9]]

多维列表的取值
mylist[0] #[1,2,3]
mylist[0][0]    #1
多维列表的遍历
for i in mylist:
    for x in i:
        print(x)

注意

  • 与Python字符串不一样的是,列表中的元素是可以改变的:
  • List写在方括号之间,元素用逗号隔开。
  • 和字符串一样,list可以被索引和切片。
  • List可以使用+操作符进行拼接。
  • List中的元素是可以改变的。
常用列表的相关函数
len() 计算列表的长度
list.count() 统计某个元素在列表中出现的次数
append 向列表中添加一个值
list.extend() 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index() 从列表中找出某个值第一个匹配项的索引位置
list.insert(index,obj) 将对象插入列表
list.pop() 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove() 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素
list.sort() 对原列表进行排序
list.clear() 清空列表
list.copy() 复制列表
copy.deepcopy() 深拷贝 拷贝对象及其子对象
copy.copy() 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象

四 Tuple(元组)

元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。

元组与字符串类似,可以被索引且下标索引从0开始,-1 为从末尾开始的位置。也可以进行截取(看上面,这里不再赘述)。

注意

  • 与字符串一样,元组的元素不能修改。
  • 元组也可以被索引和切片,方法一样。
  • 注意构造包含0或1个元素的元组的特殊语法规则。 空元祖() 一个值的元祖(1,)
  • 元组也可以使用+操作符进行拼接。
  • 元组的个别值不可以删除 但我们可以使用del语句来删除整个元组

五 Set(集合)

集合(set)是一个无序不重复元素的序列。

基本功能是进行成员关系测试和删除重复元素

可以使用大括号 { } 或者 set() 函数创建集合,

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

# 成员测试
if 'Rose' in student :
    print('Rose 在集合中')
else :
    print('Rose 不在集合中')
 
# set可以进行集合运算
a = set('abr')
b = set('ala')
 
print(a)
print(a - b)     # a和b的差集
print(a | b)     # a和b的并集
print(a & b)     # a和b的交集
print(a ^ b)     # a和b中不同时存在的元素

六 Dictionary (字典)

语法格式: {健:值,健:值...}

字典的取值

tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
print (dict['name'])       # 输出键为 'name' 的值
print (tinydict)          # 输出完整的字典
print (tinydict.keys())   # 输出所有键
print (tinydict.values()) # 输出所有值

字典值的添加

当给原字典 添加了一个不存在的健对应的值的时候 则为添加

myDict = {'name':'张三'}
myDict['age'] = 18 #将age:18添加到 字典 myDict里

字典的值的修改

当给字典已存在的键 赋新的值的时候 是对键key的值进行修改

myDict = {'name':'张三'}
myDict['name'] = '李四' #将健key  为name的 值修改为 李四

字典的值的删除

通过字典的唯一的健进行删除

myDict = {'name':'张三'}
del myDict['name']  #将健key  为name的 健值对删除

删除字典

del 字典名
字典名.clear() #清空整个字典
del myDict['name']

构造函数 dict() 可以直接从键值对序列中构建字典如下:

>>>dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)])
{'Taobao': 3, 'Runoob': 1, 'Google': 2}
 
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
 
>>> dict(Runoob=1, Google=2, Taobao=3)
{'Taobao': 3, 'Runoob': 1, 'Google': 2}

#想使用函数 dict 转换成 字典 前提是 必须键值对 的形式
myList = [('name', '张三'), ('age', 18), ('sex', '男'), ('hobby', '写代码')]
myList = [{'name', '张三'}, {'age', 18}, {'sex', '男'}, {'hobby', '写代码'}]
myList = [['name', '张三'], ['age', 18], ['sex', '男'], ['hobby', '写代码']]

字典的遍历

for i in mydict:
    print(i) #返回的都是键

for x,y in mydict.items(): #items() 函数以列表返回可遍历的(键, 值) 元组数组。
    print(x,y) #返回键 值

注意:

  1. 字典是一种映射类型,它的元素是键值对。
  2. 字典的关键字必须为不可变类型,且不能重复。
  3. 创建空字典使用 { }。
  4. 列表是有序的对象结合,字典是无序的对象集合。
  5. 两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取
  6. 字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合。
  7. 在同一个字典中,键(key)必须是唯一的。

字典常用的函数

mydict.items() 以列表返回可遍历的(键, 值) 元组数组
mydict.keys()/mydict.values() 以列表返回一个字典所有的键/以列表返回一个字典所有的值
mydict.update(dict2) 把字典dict2的键/值对更新到dict里
mydict.pop(key) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
mydict.popitem() 随机返回并删除字典中的一对键和值。 返回一个键值对(key,value)形式。3.6(删除字典中最后一个键值对)
mydict.copy() 返回一个字典的浅复制
deepcopy() 深复制
myDict.clear() 清空字典
Get 通过键获取值
import copy
myDict = {'a':{'c':'d'}}
b = copy.copy(myDict)
myDict['a']['c'] = 'f'
print(myDict)
print(b)

七 Python数据类型转换

函数 描述
int(x [,base]) 将x转换为一个整数
float(x) 将x转换到一个浮点数
complex(x [,y]) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
str(x) 将对象 x 转换为字符串
eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s) 将序列 s 转换为一个元组
list(s) 将序列 s 转换为一个列表
set(s) 转换为可变集合
dict(d) 创建一个字典。d 必须是一个序列 (key,value)元组。
bool 转换为bool值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,720评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,367评论 0 5
  • Python 简介Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设...
    在暴风雨中逆袭阅读 1,713评论 0 12
  • 小密圈作业 1,走出误区 之前一直是好话题才写公众号,精品文章才发公众号,一般的作业都是发简书。想着公众号文章发正...
    叁叁二二叁磊设计阅读 115评论 0 1
  • 一段婚姻中,女人必须要有自己的原则和底线: 我可以为你洗衣做饭,但也需要你共同打理生活;我可以理解你工作忙碌,但也...
    紫悦姐阅读 398评论 0 3