【Python学习笔记】8. Python3 数据类型转换与推导式

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前言

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

Python3 数据类型转换

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

Python 数据类型转换可以分为两种

隐式类型转换 - 自动完成
显式类型转换 - 需要使用类型函数来转换

隐式类型转换

在隐式类型转换中Python 会自动将一种数据类型转换为另一种数据类型不需要我们去干预。

以下实例中我们对两种不同类型的数据进行运算较低数据类型整数就会转换为较高数据类型浮点数以避免数据丢失。

实例

num_int = 123
num_flo = 1.23

num_new = num_int + num_flo

print("datatype of num_int:",type(num_int))
print("datatype of num_flo:",type(num_flo))

print("Value of num_new:",num_new)
print("datatype of num_new:",type(num_new))

以上实例输出结果为

num_int 数据类型为: <class ‘int’>
num_flo 数据类型为: <class ‘float’>
num_new: 值为: 124.23
num_new 数据类型为: <class ‘float’>

代码解析
实例中我们对两个不同数据类型的变量 num_int 和 num_flo 进行相加运算并存储在变量 num_new 中。
然后查看三个变量的数据类型。
在输出结果中我们看到 num_int 是 整型integer num_flo 是 浮点型float。
同样新的变量 num_new 是 浮点型float这是因为 Python 会将较小的数据类型转换为较大的数据类型以避免数据丢失。
我们再看一个实例整型数据与字符串类型的数据进行相加

实例

num_int = 123
num_str = "456"

print("Data type of num_int:",type(num_int))
print("Data type of num_str:",type(num_str))

print(num_int+num_str)

以上实例输出结果为

num_int 数据类型为: <class ‘int’>
num_str 数据类型为: <class ‘str’>
Traceback (most recent call last):
File “/python-test/test.py”, line 7, in
print(num_int+num_str)
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

从输出中可以看出整型和字符串类型运算结果会报错输出 TypeError。 Python 在这种情况下无法使用隐式转换。

但是Python 为这些类型的情况提供了一种解决方案称为显式转换。

显式类型转换

在显式类型转换中用户将对象的数据类型转换为所需的数据类型。 我们使用 int()、float()、str() 等预定义函数来执行显式类型转换。

int() 强制转换为整型
实例

x = int(1)   # x 输出结果为 1
y = int(2.8) # y 输出结果为 2
z = int("3") # z 输出结果为 3

float() 强制转换为浮点型
实例

x = float(1)     # x 输出结果为 1.0
y = float(2.8)   # y 输出结果为 2.8
z = float("3")   # z 输出结果为 3.0
w = float("4.2") # w 输出结果为 4.2

str() 强制转换为字符串类型
实例

x = str("s1") # x 输出结果为 's1'
y = str(2)    # y 输出结果为 '2'
z = str(3.0)  # z 输出结果为 '3.0'

整型和字符串类型进行运算就可以用强制类型转换来完成
实例

num_int = 123
num_str = "456"

print("num_int 数据类型为:",type(num_int))
print("类型转换前num_str 数据类型为:",type(num_str))

num_str = int(num_str)    # 强制转换为整型
print("类型转换后num_str 数据类型为:",type(num_str))

num_sum = num_int + num_str

print("num_int 与 num_str 相加结果为:",num_sum)
print("sum 数据类型为:",type(num_sum))

以上实例输出结果为

num_int 数据类型为: <class ‘int’>
类型转换前num_str 数据类型为: <class ‘str’>
类型转换后num_str 数据类型为: <class ‘int’>
num_int 与 num_str 相加结果为: 579
sum 数据类型为: <class ‘int’>

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象表示转换的值。

函数描述
int(x [,base])将x转换为一个整数
float(x)将x转换到一个浮点数
complex(real [,imag])创建一个复数
str(x)将对象 x 转换为字符串
repr(x)将对象 x 转换为表达式字符串
eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)将序列 s 转换为一个元组
list(s)将序列 s 转换为一个列表
set(s)转换为可变集合
dict(d)创建一个字典。d 必须是一个 (key, value)元组序列。
frozenset(s)转换为不可变集合
chr(x)将一个整数转换为一个字符
ord(x)将一个字符转换为它的整数值
hex(x)将一个整数转换为一个十六进制字符串
oct(x)将一个整数转换为一个八进制字符串

Python 推导式

Python 推导式是一种独特的数据处理方式可以从一个数据序列构建另一个新的数据序列的结构体。

Python 支持各种数据结构的推导式

列表(list)推导式
字典(dict)推导式
集合(set)推导式
元组(tuple)推导式

列表推导式

列表推导式格式为
[表达式 for 变量 in 列表]
[out_exp_res for out_exp in input_list]

或者
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]

out_exp_res列表生成元素表达式可以是有返回值的函数。
for out_exp in input_list迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
if condition条件语句可以过滤列表中不符合条件的值。

过滤掉长度小于或等于3的字符串列表并将剩下的转换成大写字母
实例

>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper()for name in names if len(name)>3]
>>> print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']

计算 30 以内可以被 3 整除的整数
实例

>>> multiples = [i for i in range(30) if i % 3 == 0]
>>> print(multiples)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

字典推导式

字典推导基本格式
{ key_expr: value_expr for value in collection }

{ key_expr: value_expr for value in collection if condition }

使用字符串及其长度创建字典
实例

listdemo = ['Google','csdn', 'Taobao']
# 将列表中各字符串值为键各字符串的长度为值组成键值对
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{'Google': 6, 'csdn': 4, 'Taobao': 6}

提供三个数字以三个数字为键三个数字的平方为值来创建字典
实例

>>> dic = {x: x**2 for x in (2, 4, 6)}
>>> dic
{2: 4, 4: 16, 6: 36}
>>> type(dic)
<class 'dict'>

集合推导式

集合推导式基本格式
{ expression for item in Sequence }

{ expression for item in Sequence if conditional }

计算数字 1,2,3 的平方数
实例

>>> setnew = {i**2 for i in (1,2,3)}
>>> setnew
{1, 4, 9}

判断不是 abc 的字母并输出
实例

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'d', 'r'}
>>> type(a)
<class 'set'>

元组推导式生成器表达式

元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型快速生成一个满足指定需求的元组。

元组推导式基本格式
(expression for item in Sequence )

(expression for item in Sequence if conditional )

元组推导式和列表推导式的用法也完全相同只是元组推导式是用 () 圆括号将各部分括起来而列表推导式用的是中括号 []另外元组推导式返回的结果是一个生成器对象。

例如我们可以使用下面的代码生成一个包含数字 1~9 的元组
实例

>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50>  # 返回的是生成器对象

>>> tuple(a)       # 使用 tuple() 函数可以直接将生成器对象转换成元组
(1, 2, 3, 4, 5, 6, 7, 8, 9)
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python