本文基于python3.8版本,总结了各种数据类型直接的转换规则和方法。算是比较全了,可以收藏当手册来查。

概述

数据类型转换,指的是通过某种方法,将一个数据由原来的类型转换为另外一个类型。比如,我们将字符串“123”转换为数字123,这就是一种数据类型的转换。

Python支持各种标准数据类型之间的转换,但并不是任意数据都可以转换的,所有的转换要符合“常理”,逻辑上应该是成立的。比如,你不应该试图将一个complex类型转换为int,因为python也不知该怎么转换。

数据类型转换支持情况汇总表

下面我整理了python3数据类型之间转换的支持情况(这应该是最全的了):

各种类型之间的转换及实例

转换为int

 print(int(1.2))  # float -> int
print(int('')) # string -> int
print(int(b'')) # bytes -> int
print('0x%x' % (int.from_bytes(b'', byteorder='little', signed=True)))
print(int(True)) # bool -> int

转换为float

 print(float('1.2'))  # string->float
print(float(b'3.4')) # bytes -> float
print(float(123)) # int->float
print(float(False)) # bool->float

转换为bool

所有类型都可以转换为bool型

 print(bool(1))  # int->bool
print(bool(0.0)) # float->bool
print(bool(0 + 0j)) # complex->bool
print(bool('')) # string->bool, 空字符串为False,其它都是True
print(bool(b'hello')) # bytes->bool, 空为False,其它都是True
print(bool.from_bytes(b'\x00', byteorder='little')) # bytes->bool
print(bool([])) # list->bool, 空为False,其它都是True
print(bool(())) # tuple->bool, 空为False,其它都是True
print(bool({})) # dict->bool, 空为False,其它都是True
print(bool(set())) # set->bool, 空为False,其它都是True

转换为complex

 print(complex(100))  # int->complex
print(complex(1.2)) # float->complex
print(complex(True)) # bool->complex
print(complex('1.2+2.3j')) # string->complex

转换为string

所有基本类型都可以转换为string

 print(b'hello'.decode('utf-8'))  # bytes->string
print(str(1)) # int->string
print(str(1.2)) # float->string
print(str(True)) # bool->string
print(str(1.2 + 2.3j)) # complex->string其它都是True
print(str(['hello', 100])) # list->string
print(str(('hello', 100))) # tuple->string
print(str({'name': 'xiaowang', 'age': 20})) # dict->string
print(str({'name', 'age'})) # set->string

转换为bytes

因为所有类型都可以转换为string,而string可以转换为bytes,所以所有类型都可以间接转换为bytes。
下面我们只讨论直接转换为bytes的类型

 print('bytes'.center(30, '*'))
print(b'\x64') # int转bytes
print(int.to_bytes(100, byteorder='big', signed=True, length=2)) # int转bytes
print(bool.to_bytes(True, byteorder='big', signed=True, length=2)) # bool转bytes
print('hello'.encode(encoding='utf-8')) # string转bytes
print(bytes([1, 200, 80, 50])) # list转bytes
print(bytes((1, 200, 80, 50))) # tuple转bytes
print(bytes({1, 200, 80, 50})) # set转bytes

转换为list

 print(list("hello"))  # string->list
print(list(b'hello')) # bytes->list
print(list((100, 200, 300))) # tuple->list
print(list({'name', 'age'})) # set->list
print(list({'name': 'xiaowang', 'age': 20})) # dict->list, 只取key值

转换为tuple

 print(tuple("hello"))  # string->tuple
print(tuple(b"hello")) # bytes->tuple
print(tuple([100, 200, 300])) # list->tuple
print(tuple({'name', 'age'})) # set->tuple
print(tuple({'name': 'xiaowang', 'age': 20})) # dict->tuple, 只取key值

转换为set

 print(set("hello"))  # string->set
print(set(b"hello")) # bytes->set
print(set([100, 200, 300])) # list->set
# print(set([100, 200, [300, 400]])) # list->set, list中包含可变数据类型,报异常
print(set(('name', 'age'))) # tuple->set
# print(set(('name', 'age', []))) # tuple->set,包含可变数据类型,报异常
print(set({'name': 'xiaowang', 'age': 20})) # dict->set, 只取key值

转换为dict

转换为dict的方法略微复杂一些

1、string->dict

方式一、使用json转换,字符串格式需要严格按照json格式来

 user_str = '{"name": "xiaowang", "city": "Chengdu", "age": 28}'
import json
print(json.loads(user_str))

方式二、使用eval函数转换,eval有安全隐患,不建议使用

print(eval(user_str))  

方式三、 使用ast.literal_eval

import ast
print(ast.literal_eval(user_str))

2、list->dict

方式一、需要用到zip

 user_keys = ['name', 'city', 'age']
user_values = ['xiaowang', 'Chengdu', 28]
print(dict(zip(user_keys, user_values)))

方式二、二维列表

 user_info = [
["name", "xiaowang"],
["city", "Chengdu"],
["age", 28]
]
print(dict(user_info))

set->dict tuple->dict的方式和list->dict一样


我的更多文章和专栏:

 零基础学python系列视频教程 - 每日持续更新中

我的原创杂文汇总

有趣的python实战案例源码汇总 - 持续更新中

整理了最全的Python3数据类型转换方法,可以收藏当手册用的更多相关文章

  1. 整理的最全 python常见面试题

      整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...

  2. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  3. 自己花了2天时间,重新整理了个全面的vue2的模板

    自己花了2天时间,重新整理了个全面的vue2的模板,基本vue中需要的部分都整理封装好了,希望大家喜欢^ ^.欢迎大家star或者fork呀~,https://github.com/qianxiaon ...

  4. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  5. 整理全网最全K8S集群管理工具、平台

    整理常见的整理全网最全K8S集群管理工具.平台解决方案. 1 Rancher Rancher中文官网:https://docs.rancher.cn/ 2 KubeSphere 官网:https:// ...

  6. python3 数据类型

    Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) Number(数字) Py ...

  7. python3数据类型

    python基本数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) ...

  8. python3数据类型--数字

    数字 Python数字数据类型用于存储数值.数字数据类型是不允许改变的,所以如果改变数字数据类型的值,将重新分配内存空间. 以下实例在变量赋值时Number对象被创建: #!/usr/bin/env ...

  9. Python3数据类型及转换

    I. 数据类型 Python3将程序中的任何内容统称为对象(Object),基本的数据类型有数字和字符串等,也可以使用自定义的类(Classes)创建新的类型. Python3中有六个标准的数据类型: ...

随机推荐

  1. python的历史和下载python解释器

    一.python的诞生 1.Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,创造了一种C和sh ...

  2. PHP xml 外部实体注入漏洞学习

    XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Exten ...

  3. 再看CVE-2018-12613 phpmyadmin后台文件包含&&RPO攻击

    写在前面 因为看了朋友的一篇分析又回头想了想自己去年遇到的这个纠结的问题. 去年写过一篇phpmyadmin后台文件包含的文章,写的非常的草草,并没有分析的过程,只是把自己的问题记了下来.当时纠结于最 ...

  4. [转+自]关于PHP7的新特性(涉及取反和disabled_functions绕过)

    PHP7和PHP5上的安全区别 preg_replace()不再支持/e修饰符 利用\e修饰符执行代码的后门大家也用了不少了,具体看官方的这段描述: 如果设置了这个被弃用的修饰符, preg_repl ...

  5. 归并排序(归并排序求逆序对数)--16--归并排序--Leetcode面试题51.数组中的逆序对

    面试题51. 数组中的逆序对 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出 ...

  6. Java中集合概念

    集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行储存,而想要储存多个对象,就不能是一个基本的变量,而应该是一个 ...

  7. MySQL server has gone away(在执行sql的时候,莫名的报错)

    原文:https://cenalulu.github.io/mysql/mysql-has-gone-away/ MySQL Server has gone away报错原因汇总分析 原因1. MyS ...

  8. Python pandas库159个常用方法使用说明

    Pandas库专为数据分析而设计,它是使Python成为强大而高效的数据分析环境的重要因素. 一.Pandas数据结构 1.import pandas as pd import numpy as np ...

  9. php--static用法

    static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”. 如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“ ...

  10. uniqid用法

    uniqid():妙用就是以当前时间微妙为单位,返回的唯一ID 我们可以用到密码加密和接口加密的功能上,比如 $salt = substr(uniqid(rand()), -6);//截取倒数6位$p ...