失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python数据类型可以分子类型_python 数据类型

python数据类型可以分子类型_python 数据类型

时间:2020-04-16 14:11:30

相关推荐

python数据类型可以分子类型_python 数据类型

一,数字

Python 数字数据类型用于存储数值。

数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。

以下实例在变量赋值时 Number 对象将被创建:

var1 = 1

var2 = 10

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

del语句的语法是:

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

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

del var

del var_a, var_b

Python 支持三种不同的数值类型:

整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。

浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)

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

我们可以使用十六进制和八进制来代表整数:

>>> number = 0xA0F # 十六进制

>>> number

2575

>>> number=0o37 # 八进制

>>> number

31

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

数字类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

int(x) 将x转换为一个整数。

float(x) 将x转换到一个浮点数。

complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。

complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。

以下实例将浮点数变量 a 转换为整数:

>>> a = 1.0

>>> int(a)

1

数字运算

Python 解释器可以作为一个简单的计算器,您可以在解释器里输入一个表达式,它将输出表达式的值。

表达式的语法很直白: +, -, ***** 和 /, 和其它语言(如Pascal或C)里一样。例如:

>>> 2 + 2

4

>>> 50 - 5*6

20

>>> (50 - 5*6) / 4

5.0

>>> 8 / 5 # 总是返回一个浮点数

1.6

注意:在不同的机器上浮点运算的结果可能会不一样。

在整数除法中,除法 / 总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符 // :

>>> 17 / 3 # 整数除法返回浮点型

5.666666666666667

>>>

>>> 17 // 3 # 整数除法返回向下取整后的结果

5

>>> 17 % 3 # %操作符返回除法的余数

2

>>> 5 * 3 + 2

17

注意://得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。

>>> 7//2

3

>>> 7.0//2

3.0

>>> 7//2.0

3.0

>>>

Python 可以使用 ** 操作来进行幂运算:

>>> 5 ** 2 # 5 的平方

25

>>> 2 ** 7 # 2的7次方

128

不同类型的数混合运算时会将整数转换为浮点数:

>>> 3 * 3.75 / 1.5

7.5

>>> 7.0 / 2

3.5

python是强类型动态语言,即字符串格式的1和数字格式的1不能做数学运算

数学常量

常量

描述

pi

数学常量 pi(圆周率,一般以π来表示)

e

数学常量 e,e即自然常数(自然常数)。

二,字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号( ' 或 " )来创建字符串。

创建字符串很简单,只要为变量分配一个值即可。例如:

var1 = 'Hello World!' var2 = "Runoob"

转义字符

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

转义字符

描述

(在行尾时)

续行符

\

反斜杠符号

'

单引号

"

双引号

\a

响铃

\b

退格(Backspace)

\000

\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

\oyy

八进制数,yy 代表的字符,例如:\o12 代表换行,其中 o 是字母,不是数字 0。

\xyy

十六进制数,yy代表的字符,例如:\x0a代表换行

\other

其它的字符以普通格式输出

字符串运算符

下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python":

操作符

描述

实例

+

字符串连接

a + b 输出结果: HelloPython

*

重复输出字符串

a*2 输出结果:HelloHello

[]

通过索引获取字符串中字符

a[1] 输出结果 e

[ : ]

截取字符串中的一部分,遵循左闭右开原则,str[0:2] 是不包含第 3 个字符的。

a[1:4] 输出结果 ell

in

成员运算符 - 如果字符串中包含给定的字符返回 True

'H' in a 输出结果 True

not in

成员运算符 - 如果字符串中不包含给定的字符返回 True

'M' not in a 输出结果 True

r/R

原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。

print( r'\n' ) print( R'\n' )

%

格式字符串

请看下一节内容。

字符串格式化

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

print ("我叫 %s 今年 %d 岁!" % ('小明', 10))

我叫 小明 今年 10 岁!

python字符串格式化符号:

符 号

描述

%c

格式化字符及其ASCII码

%s

格式化字符串

%d

格式化整数

%u

格式化无符号整型

%o

格式化无符号八进制数

%x

格式化无符号十六进制数

%X

格式化无符号十六进制数(大写)

%f

格式化浮点数字,可指定小数点后的精度

%e

用科学计数法格式化浮点数

%E

作用同%e,用科学计数法格式化浮点数

%g

%f和%e的简写

%G

%f 和 %E 的简写

%p

用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号

功能

*

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号( + )

在正数前面显示空格

#

在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')

0

显示的数字前面填充'0'而不是默认的空格

%

'%%'输出一个单一的'%'

(var)

映射变量(字典参数)

m.n.

m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

三引号

python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。实例如下

#!/usr/bin/python3 para_str = """这是一个多行字符串的实例 多行字符串可以使用制表符 TAB ( \t )。 也可以使用换行符 [ \n ]。 """ print (para_str)

以上实例执行结果为:

这是一个多行字符串的实例

多行字符串可以使用制表符

TAB ( )。

也可以使用换行符 [

]。

f-string

f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。

f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去,实例如下:

name = 'Runoob'

f'Hello {name}' # 替换变量

f'{1+2}' # 使用表达式

'3'

w = {'name': 'Runoob', 'url': ''}

f'{w["name"]}: {w["url"]}'

'Runoob: '

用了这种方式明显更简单了,不用再去判断使用 %s,还是 %d。

在 Python 3.8 的版本中可以使用 = 符号来拼接运算表达式与结果:

x = 1

print(f'{x+1}') # Python 3.6

2

x = 1

print(f'{x+1=}') # Python 3.8

'x+1=2'

Unicode 字符串

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。

在Python3中,所有的字符串都是Unicode字符串。

字符串内建方法

Python 的字符串常用内建函数如下:

常用方法

1,按索引取值(正向取+反向取)

res='1234567'

print(res[0])

print(res[-1])

2,切片:索引的拓展应用,从一个大字符串中拷贝出一个子字符串

msg='hello world'

# 顾头不顾尾

res=msg[0:5] #x

print(res)

print(msg)

#步长

res=msg[0:5:2] # 0 2 4

print(res) # hlo

#反向步长

res=msg[5:0:-1]

print(res) #" olle"

#不填写时的默认值

msg='hello world'

res=msg[:] # res=msg[0:11]

print(res)

res=msg[::-1] # 把字符串倒过来

print(res)

3 长度 len

msg='hello world'

print(len(msg))

4 成员运算in和not in

判断一个子字符串是否存在于一个大字符串中

print("alex" in "alex is sb")

print("alex" not in "alex is sb")

print(not "alex" in "alex is sb") # 不推荐使用

5 移除字符串左右两侧的符号strip

默认去掉的空格

msg=' egon '

res=msg.strip()

print(msg) # 不会改变原值

print(res) # 是产生了新值

括号内传什么参数就去掉什么,直到遇到第一个不能删除的字符

msg='****egon****'

print(msg.strip('*'))

注意删除多个字符时:只要头尾有对应其中的某个字符即删除,不考虑顺序,直到遇到第一个不包含在其中的字符为止。

str = '123132231213321312==321312213231123132'

print(str.strip('123'))

以上代码输出结果为:==

msg='****e*****gon****'

print(msg.strip('*'))

msg='**/*=-**egon**-=()**'

print(msg.strip('*/-=()'))

还有左删除和右删除 lstrip()和 rstrip()

6 切分split:把一个字符串按照某种分隔符进行切分,得到一个列表

默认分隔符是空格

info='egon 18 male'

res=info.split()

print(res)

指定分隔符

info='egon:18:male'

res=info.split(':')

print(res)

指定分隔次数

info='egon:18:male'

res=info.split(':',1)

print(res)

**把列表拼接成字符串 join **

l=['egon', '18', 'male']

res=l[0]+":"+l[1]+":"+l[2]

res=":".join(l) # 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串

print(res)

l=[1,"2",'aaa'] # 不能拼接有非字符串的列表,会报错!

":".join(l)

7 用于for循环

info='egon:18:male'

for x in info:

print(x)

8 大小写转换 lower,upper

全大写全小写

msg='AbbbCCCC'

print(msg.lower())

print(msg.upper())

9 判断开头结尾 startswith,endswith

返回布尔值

print("alex is sb".startswith("alex"))

print("alex is sb".endswith('sb'))

10 格式化字符 format

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

基本语法是通过 {} 和 : 来代替以前的 % 。

format 函数可以接受不限个参数,位置可以不按顺序。还可以用字典传值

>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序

'hello world'

>>> "{0} {1}".format("hello", "world") # 设置指定位置

'hello world'

>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置

'world hello world'

11 maketrans 和translate 群替换字符串

maketrans创建映射关系,translate负责替换

intab = "aeiou"

outtab = "12345"

trantab = str.maketrans(intab, outtab)

str = "this is string example....wow!!!"

print (str.translate(trantab))

th3s 3s str3ng 2x1mpl2....w4w!!!

参数详解:

一个参数,该参数必须为字典

>>> d = {'a':'1','b':'2','c':'3','d':'4','e':'5','s':'6'}

>>> trantab = str.maketrans(d)

>>> st='just do it'

>>> print(st.translate(trantab))

ju6t 4o it

两个参数 x 和 y,x、y 必须是长度相等的字符串,并且 x 中每个字符映射到 y 中相同位置的字符

>>> x = 'abcdefs'

>>> y = '1234567'

>>> st='just do it'

>>> trantab = str.maketrans(x,y)

>>> print(st.translate(trantab))

ju7t 4o it

三个参数 x、y、z,第三个参数 z 必须是字符串,其字符将被映射为 None,即删除该字符;如果 z 中字符与 x 中字符重复,该重复的字符在最终结果中还是会被删除。也就是无论是否重复,只要有第三个参数 z,z 中的字符都会被删除。

>>> x = 'abcdefs'

>>> y='1234567'

>>> z='ot'

>>> st='just do it'

>>> trantab = str.maketrans(x,y,z)

>>> print(st.translate(trantab))

ju7 4 i

>>>x = 'abst'

>>>y = '1234'

>>>z = 's'

>>>st = 'just do it'

>>>trantab = str.maketrans(x,y,z)

>>>print(st.translate(trantab))

ju4 do i4

replace 单次替换

msg="you can you up no can no bb"

print(msg.replace("you","YOU",))

print(msg.replace("you","YOU",1))

12 isdigit

判断字符串是否由纯数字组成

print('123'.isdigit())

print('12.3'.isdigit())

其他方法

1 查找,计数

find,rfind,index,rindex,count

msg='hello egon hahaha' 找到返回起始索引

msg='hello egon hahaha'

print(msg.find('e')) # 返回要查找的字符串在大字符串中的起始索引

print(msg.find('egon'))

print(msg.index('e'))

print(msg.index('egon'))

找不到时两种方法的不同情况

msg='hello egon hahaha'

print(msg.find('xxx')) # 返回-1,代表找不到

print(msg.index('xxx')) # 抛出异常

msg='hello egon hahaha egon、 egon'

print(msg.count('egon'))

2 设置填充

center,ljust,rjust,zfill

居中,左对齐,右对齐,zero fill用零填充

print('egon'.center(50,'*'))

print('egon'.ljust(50,'*'))

print('egon'.rjust(50,'*'))

print('egon'.zfill(10))

3 设置制表符的空格数 expandtabs

msg='hello\tworld'

print(msg.expandtabs(2)) # 设置制表符代表的空格数为2

4 样式调整 capitalize,swapcase,title

整个字符串的第一个单词首字母大写,大小写翻转,每个单词的首字母大写

print("hello world egon".capitalize())

print("Hello WorLd EGon".swapcase())

print("hello world egon".title())

5 is数字系列

num1=b'4' #bytes

num2=u'4' #unicode,python3中无需加u就是unicode

num3='四' #中文数字

num4='Ⅳ' #罗马数字

isdigit只能识别:num1、num2

print(num1.isdigit()) # True

print(num2.isdigit()) # True

print(num3.isdigit()) # False

print(num4.isdigit()) # False

isnumberic可以识别:num2、num3、num4

print(num2.isnumeric()) # True

print(num3.isnumeric()) # True

print(num4.isnumeric()) # True

isdecimal只能识别:num2

print(num2.isdecimal()) # True

print(num3.isdecimal()) # False

print(num4.isdecimal()) # False

is其他

print('abc'.islower()) # 是否全小写

print('ABC'.isupper()) # 是否全大写

print('Hello World'.istitle()) # 是否所有单词首字母大写

print('123123aadsf'.isalnum()) # 字符串由字母或数字组成结果为True

print('ad'.isalpha()) # 字符串由由字母组成结果为True

print(' '.isspace()) # 字符串由空格组成结果为True

print('print'.isidentifier()) # 是否合法标识符,True

print('age_of_egon'.isidentifier()) #True

print('1age_of_egon'.isidentifier()) # False

三,列表

作用:列表一般用于按位置存放多个值

定义:列表是一个由多个数据组成的数据结构

l=[1,1.2,'a']

# 相当于l=list([1,1.2,'a'])

print(type(l))

#

类型转换: 能够被for循环遍历的类型都可以使用list()转成列表

res=list('hello')

print(res)

s = "hello"

l = []

for i in s:

l.append(i)

print(l)

列表运算

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

如下所示:

Python 表达式

结果

描述

len([1, 2, 3])

3

长度

[1, 2, 3] + [4, 5, 6]

[1, 2, 3, 4, 5, 6]

组合

['Hi!'] * 4

['Hi!', 'Hi!', 'Hi!', 'Hi!']

重复

3 in [1, 2, 3]

True

元素是否存在于列表中

for x in [1, 2, 3]: print(x, end=" ")

1 2 3

迭代

列表内建方法

常用方法

1、按索引存取值(正向存取+反向存取):即可以取也可以改

l=[111,'egon','hello']

# 正向取值

print(l[0])

# 反向取值

print(l[-1])

# 可以取也可以改:索引存在则修改对应的值

l[0]=222

print(l)

# 无论是取值操作还是赋值操作:索引不存在则报错

l[3]=333

2、切片(顾头不顾尾,步长)

l = [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]

print(l[0:3])

# [111, 'egon', 'hello']

print(l[0:5:2]) # 取索引为0 2 4的值

# [111, 'hello', 'b']

print(l[0:len(l)])

# [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]

print(l[:])

# [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]

new_l=l[:] # 切片等同于拷贝行为,而且相当于浅copy

print(id(l))

# 2277356332168

print(id(new_l))

# 2277356332936

l[-1][0]=1111111# 修改原列表,验证切片与浅拷贝类似

print(l)

# [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1111111, 2, 3]]

print(new_l)

# [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1111111, 2, 3]]

print(l[::-1])

# [[1111111, 2, 3], 'd', 'c', 'b', 'a', 'hello', 'egon', 111]

3、长度

print(len([1, 2, 3]))

# 3

4、成员运算in和not in

print('aaa' in ['aaa', 1, 2])

# True

print(1 in ['aaa', 1, 2])

# True

5、往列表中添加值

追加 append

在列表尾部添加单个数据

l=[111,'egon','hello']

l.append(3333)

l.append(4444)

print(l)

# l=[111,'egon','hello',3333,4444]

插入 insert

按照填入的索引,在对应的位置插入数据

l=[111,'egon','hello']

l.insert(0,'alex')

print(l)

# ['alex', 111, 'egon', 'hello']

**解压添加值 extend **

extend可以将新列表内的数据解压添加到原列表

如果我们想将一个新的列表内的数据添加到原列表,使用append无法实现,我们可以使用extend方法

new_l = [1, 2, 3]

l = [111, 'egon', 'hello']

for item in new_l:

l.append(item)

print(l)

# [111, 'egon', 'hello', 1, 2, 3]

# 实现了功能

l.extend('abc')

print(l)

# [111, 'egon', 'hello', 1, 2, 3, 'a', 'b', 'c']

6 删除

方式一:根据索引删除,只是单纯的删除、没有返回值

l = [111, 'egon', 'hello']

del l[1]

print(l)

x = del l[1] # 查看返回值,抛出异常,不支持赋值语法

方式二:list.pop()根据索引删除,会返回删除的值(经常使用)

不输入索引时默认删除最后一个数据

l = [111, 'egon', 'hello', 55]

l.pop() # 不指定索引默认删除最后一个

l.pop()

print(l)

# [111, 'egon']

res = l.pop(1)

print(l)

# [111]

print(res)

# egon

方式三:l.remove()根据元素删除,返回None

l = [111, 'egon', [1,2,3],'hello']

l.remove([1,2,3])

print(l)

# [111, 'egon', 'hello']

res=l.remove('egon')# 返回值为None

print(res)

# None

7、循环与列表

不要在循环中对列表进行删除操作,会导致索引错乱,

l=[1,'aaa','bbb']

for x in l:

l.pop(1)

print(x)

其他方法

1、l.count()

输入内容在列表中出现的次数

print(l.count('aaa'))

2、l.index()

查找方法,查找输入内容第一次出现的位置的索引

print(l.index('aaa'))

print(l.index('aaaaaaaaa')) # 找不到报错

3、l.clear()

清空列表

l.clear()

4、l.reverse():

注意: reverse不是排序后翻转,是将列表的索引翻转

l = [1, 'egon','alex','lxx']

l.reverse()

print(l)

5、l.sort(): 列表内元素必须是同种类型才可以排序

l=[11,-3,9,2,3.1]

l.sort() # 默认从小到大排,称之为升序

l.sort(reverse=True) # 从大到小排,设置为降序

print(l)

l=[11,'a',12] # 不同类型报错!

l.sort()

l=['c','e','a']# 按ascii码排序,A

l.sort()

print(l)

字符串可以比大小,按照对应的位置的字符依次pk

字符串的大小是按照ASCI码表的先后顺序加以区别,表中排在后面的字符大于前面的

print('a'>'b')

# False

print('abz'>'abcdefg')

# True

列表也可以比大小,原理同字符串一样,但是对应位置的元素必须是同种类型

l1=[1,'abc','zaa']

l2=[1,'abc','zb']

print(l1 < l2)

# True

max(list)返回列表元素最大值

min(list) 返回列表元素最小值

四,元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组就是"一个不可变的列表"

1、作用:按照索引/位置存放多个值,只用于读不用于改

2、定义:()内用逗号分隔开多个任意类型的元素

t=(1,1.3,'aa')

# 相当于t=tuple((1,1.3,'aa'))

print(t,type(t))

# (1, 1.3, 'aa')

x=(10) # 单独一个括号代表包含的意思为整数数据类型!!

print(x,type(x))

# 10

t=(10,) # 如果元组中只有一个元素,必须加逗号

print(t,type(t))

# (10,)

元组是不可变数据类型:不可变体现在它第一层的数据指向的内存地址不能更改.

t=(1,1.3,'aa') # t=(0->值1的内存地址,1->值1.3的内存地址,2->值'aaa'的内存地址,)

t[0]=11111

# TypeError: 'tuple' object does not support item assignment

t=(1,[11,22]) # t=(0->值1的内存地址,1->值[1,2]的内存地址,)

print(id(t[0]),id(t[1]))

# 1358874288 2579862236488

t[0]=111111111 # 不能改第一层的内存地址

# TypeError: 'tuple' object does not support item assignment

t[1]=222222222 # 不能改第一层的内存地址

# TypeError: 'tuple' object does not support item assignment

t[1][0]=11111111111111111# 修改第二层的内存地址

print(t)

# (1, [11111111111111111, 22])

print(id(t[0]),id(t[1]))

# 1358874288 2579862236488

# 修改第二层的内存地址后第一层内存地址不变

3、类型转换: 所有能被for循环遍历的数据都能转换成元组,与列表的转换条件相同

print(tuple('hello'))

# ('h', 'e', 'l', 'l', 'o')

print(tuple([1,2,3]))

# (1, 2, 3)

print(tuple({'a1':111,'a2':333}))

# ('a1', 'a2')

print(tuple(range(10)))

# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

元组运算

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python 表达式

结果

描述

len((1, 2, 3))

3

计算元素个数

(1, 2, 3) + (4, 5, 6)

(1, 2, 3, 4, 5, 6)

连接

('Hi!',) * 4

('Hi!', 'Hi!', 'Hi!', 'Hi!')

复制

3 in (1, 2, 3)

True

元素是否存在

for x in (1, 2, 3): print (x,)

1 2 3

迭代

元组内置方法

1、按索引取值(正向取+反向取):只能取,不能修改,否则会报错

t=('aa','bbb','cc')

print(t[0])

# aa

print(t[-1])

# cc

2、切片(顾头不顾尾,步长):切片为索引附带的功能,本质为浅拷贝,并不在原数据上进行修改

t=('aa','bbb','cc','dd','eee')

print(t[0:3])

# ('aa', 'bbb', 'cc')

print(t[::-1])

# ('eee', 'dd', 'cc', 'bbb', 'aa')

3、长度: 元组内元素个数

t=('aa','bbb','cc','dd','eee')

print(len(t))

# 5

4、成员运算in和not in

t=('aa','bbb','cc','dd','eee')

print('aa' in t)

# True

5、循环: 遍历读取

for x in t:

print(x)

6、查找:index和count

t=(2,3,111,111,111,111)

print(t.index(111))

# 2

print(t.index(1111111111)) # index查找数据不存在时会报错

# ValueError: tuple.index(x): x not in tuple

print(t.count(111))# 111出现的次数

# 4

五,字典

1、作用

字典可以用来存储含有描述性信息的数据,可读性比其他类型高,比如{"name":"wu","age":24}

它是以键值对的形式存储数据

2、定义:{}内用逗号分隔开多个key:value,其中value可以使任意类型,但是key必须是不可变类型,且不能重复

造字典的方式一 手写:

d={'k1':111,(1,2,3):222} # d=dict(...)

print(d['k1'])

# 111

print(d[(1,2,3)])

# 222

print(type(d))

#

d={} # 默认定义出来的是空字典

print(d,type(d))

# {}

造字典的方式二 dict()函数:

>>>dict() # 创建空字典

{}

>>> dict(a='a', b='b', t='t') # 传入关键字

{'a': 'a', 'b': 'b', 't': 't'}

>>> dict(zip(['one', 'two', 'three'], [1, 2, 3])) # 映射函数方式来构造字典

{'three': 3, 'two': 2, 'one': 1}

>>> dict([('one', 1), ('two', 2), ('three', 3)]) # 可迭代对象方式来构造字典

{'three': 3, 'two': 2, 'one': 1}

>>>

造字典的方式三:初始化一个字典

seq = ('name', 'age', 'sex')

dict = dict.fromkeys(seq)

print ("新的字典为 : %s" % str(dict))

dict = dict.fromkeys(seq, 10)

print ("新的字典为 : %s" % str(dict))

新的字典为 : {'age': None, 'name': None, 'sex': None}

新的字典为 : {'age': 10, 'name': 10, 'sex': 10}

字典不能运算

字典内置方法

基础方法

1、按key存取值:可存可取

d={'k1':111}

# 针对赋值操作:如果key存在,则修改

d['k1']=222

# 针对赋值操作:如果key不存在,则创建新值

d['k2']=3333

print(d)

# {'k1': 222, 'k2': 3333}

2、长度len

d={'k1':111,'k2':2222,'k1':3333,'k1':4444}

print(len(d))

# 4

3、成员运算in和not in:根据key

d={'k1':111,'k2':2222}

print('k1' in d)

# True

print(111 in d) # 只检测key

# False

4、删除

通用删除方法

d={'k1':111,'k2':2222}

del d['k1']

print(d)

pop删除:根据key删除元素,返回删除key对应的那个value值,如果要删除的 key 不存在,则需要添加默认值,否则会报错:

d={'k1':111,'k2':2222}

res=d.pop('k2')

print(d)

print(res)

dict1 = {1: "a", 2: [1, 2]}

print(dict1.pop(3,"nokey"),dict1) # 设置默认值,必须添加,否则报错

nokey {2: [1, 2]}

popitem删除:python2随机删除,python3删除最后一个,返回元组(删除的key,删除的value)

d={'k1':111,'k2':2222}

res=d.popitem()

print(d)

# {'k1': 111}

print(res)

# ('k2', 2222)

5 键值对items() ,键keys(),值values()

在python2中

d={'k1':111,'k2':2222}

d.keys()

['k2', 'k1']

d.values()

[2222, 111]

d.items()

[('k2', 2222), ('k1', 111)]

dict(d.items())

{'k2': 2222, 'k1': 111}

6、for循环使用

d={'k1':111,'k2':2222}

for k in d.keys():

print(k)

# k1

# k2

for k in d:

print(k)

# k1

# k2

for v in d.values():

print(v)

# 111

# 2222

for k,v in d.items():

print(k,v)

# k1 111

# k2 2222

print(list(d.keys()))

# ['k1', 'k2']

print(list(d.values()))

# [111, 2222]

print(list(d.items()))

# [('k1', 111), ('k2', 2222)]

常用方法

1、d.clear() 清空字典

d = {'k1': 111}

d.clear()

print(d)

# {}

2、d.update()

把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。

d={'k1':111}

d.update({'k2':222,'k3':333,'k1':111111111111111})

print(d)

# {'k1': 111111111111111, 'k2': 222, 'k3': 333}

3、d.get() :根据key取值,容错性好

d={'k1':111}

print(d['k2']) # key不存在则报错

# KeyError: 'k2'

print(d.get('k1'))

# 111

print(d.get('k2'))

# key不存在不报错,返回None

4、d.setdefault()

如果key有则不添加,返回字典的值

info = {"name": "wu"}

print(info.setdefault("name", "???"))

# wu

print(info)

# {'name': 'wu'}

如果key没有则添加,返回添加的值

info = {}

print(info.setdefault("name", "???"))

# ???

print(info)

# {'name': '???'}

5 values() 方法

values() 方法返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。

dict = {'Sex': 'female', 'Age': 7, 'Name': 'Zara'}

print ("字典所有值为 : ", list(dict.values()))

字典所有值为 : ['female', 7, 'Zara']

6 copy()方法

copy() 函数返回一个字典的浅复制。

dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

dict2 = dict1.copy()

print ("新复制的字典为 : ",dict2)

新复制的字典为 : {'Age': 7, 'Name': 'Runoob', 'Class': 'First'}

六,集合

作用:集合可以进行独特的关系运算,对某些数据能做出去重的操作

1,集合的定义:

集合的形式是在{}内用逗号分隔开多个元素,并且这多个元素有以下三个特点

集合内元素必须为不可变类型

集合内元素无序

集合内元素不重复

s={} # 直接使用{}默认创建空字典

print(type(s))

#

# 定义空集合的方法

s=set()

print(s,type(s))

# set()

s={1,2} # s=set({1,2}),集合的定义

s={1} # s=set({1}),集合的定义

# 集合内元素的3个特征

s={1,[1,2]} # 集合内元素必须为不可变类型

# TypeError: unhashable type: 'list'

s={1,'a','z','b',4,7} # 集合内元素无序

# 输出结果不同

s={1,1,1,1,1,1,'a','b'} # 集合内元素没有重复

print(s)

# {1, 'a', 'b'}

2,类型转换(集合的创建)

所有能被for循环遍历的数据类型都能被转换成集合,但是有一个前提条件:这个数据内的元素必须都为不可变数据类型

res=set('hellolllll')

print(res)

# {'e', 'l', 'o', 'h'}

s = set(range(5))

print(s)

# {0, 1, 2, 3, 4}

print(set([1,1,1,1,1,1]))

# {1}

print(set([1,1,1,1,1,1,[11,222]]) # 报错

# TypeError: unhashable type: 'list'

print(set({'k1':1,'k2':2}))

# {'k2', 'k1'}

集合关系运算

取交集:等价于intersection() 方法

两者共同的好友

friends1 = {"zero","kevin","jason","egon"}

friends2 = {"Jy","ricky","jason","egon"}

res=friends1 & friends2

print(res)

# {'egon', 'jason'}

print(friends1.intersection(friends2))

# {'egon', 'jason'}

取并集:等价于union() 方法

两者所有的好友

friends1 = {"zero","kevin","jason","egon"}

friends2 = {"Jy","ricky","jason","egon"}

print(friends1 | friends2)

# {'Jy', 'ricky', 'jason', 'kevin', 'egon', 'zero'}

print(friends1.union(friends2))

# {'Jy', 'ricky', 'jason', 'kevin', 'egon', 'zero'}

取差集:等价于difference() 方法

取friends1独有的好友

friends1 = {"zero","kevin","jason","egon"}

friends2 = {"Jy","ricky","jason","egon"}

print(friends1 - friends2)

# {'zero', 'kevin'}

print(friends1.difference(friends2))

# {'zero', 'kevin'}

取friends2独有的好友

friends1 = {"zero","kevin","jason","egon"}

friends2 = {"Jy","ricky","jason","egon"}

print(friends2 - friends1)

# {'Jy', 'ricky'}

print(friends2.difference(friends1))

# {'Jy', 'ricky'}

**对称差集: **

求两个用户独有的好友们(即去掉共有的好友)

friends1 = {"zero","kevin","jason","egon"}

friends2 = {"Jy","ricky","jason","egon"}

print(friends1 ^ friends2)

# {'ricky', 'Jy', 'zero', 'kevin'}

print(friends1.symmetric_difference(friends2))

# {'ricky', 'Jy', 'zero', 'kevin'}

父子集:包含的关系

issuperset()与issubset()

s1={1,2,3}

s2={1,2,4}

# 不存在包含关系,下面比较均为False

print(s1 > s2)

print(s1 < s2)

s1={1,2,3}

s2={1,2}

print(s1 > s2) # 当s1大于或等于s2时,才能说是S2是s1的子集

print(s1.issuperset(s2)) # s1是父集

# True

print(s2.issubset(s1)) # s2是子集,s2 < s1 =>True

# True

s1={1,2,3}

s2={1,2,3}

print(s1 == s2) # s1与s2互为子集

# True

print(s1.issuperset(s2))

# True

print(s2.issuperset(s1))

# True

集合去重

使用集合去重有两个注意点:

1,只能针对不可变类型去重

因为集合内不能存放不可哈希的数据类型,即集合内不能有可变数据类型的数据,所以集合的去重只能针对不可变类型去重。

print(set([1,1,1,1,2]))

# {1, 2}

print({1, 1, 1, [1, 1, 2]})

# TypeError: unhashable type: 'list'

2,无法保证原来的顺序

集合是一种无序的数据类型,所以去重后无法保证顺序相同

l=[1,'a','b','z',1,1,1,2]

l=list(set(l))

print(l)

# [1, 2, 'b', 'z', 'a']

其他方法

长度 len

s1 = {1, 2, 3}

print(len(s1))

# 3

成员运算 in

s1 = {1, 2, 3}

print(1 in s1)

# True

循环遍历

s1 = {1, 2, 3}

for i in s1:

print(i)

删除元素 discard,remove,pop,clear

s1 = {1, 2, 3}

s1.discard(4)

# 不会报错

s1 = {1, 2, 3}

s1.remove(4)

# KeyError: 4

pop有返回值:删除的元素

s1 = {1, 2, 3}

res = s1.pop()

print(res)

# 1

print(s1)

# {2, 3}

clear() 方法用于移除集合中的所有元素。

fruits = {"apple", "banana", "cherry"}

fruits.clear()

添加元素:add

s1 = {1, 2, 3}

s1.add(4)

print(s1)

# {1, 2, 3, 4}

更新:update

s1 = {1, 2, 3}

s1.update({1, 3, 5})

print(s1)

# {1, 2, 3, 5}

不常用方法

是否独立:isdisjoint

s1 = {1, 2, 3}

res = s1.isdisjoint({3, 4, 5, 6})

# 两个集合有交集,则返回False

print(res)

res = s1.isdisjoint({4, 5, 6})

# 两个集合完全独立、没有共同部分,则返回True

print(res)

update

这个系列相当于在之前的功能上添加一个赋值操作

s = {1, 2, 3}

s.difference_update({3,4,5}) # s=s.difference({3,4,5})

print(s)

# {1, 2}

copy() 方法用于拷贝一个集合。

fruits = {"apple", "banana", "cherry"}

x = fruits.copy()

如果觉得《python数据类型可以分子类型_python 数据类型》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。