zoukankan      html  css  js  c++  java
  • 整理了最全的Python3数据类型转换方法,可以收藏当手册用

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

    概述

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

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

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

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

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

    转换为int

    1 print(int(1.2))  # float -> int
    2 print(int('123'))  # string -> int
    3 print(int(b'456'))  # bytes -> int
    4 print('0x%x' % (int.from_bytes(b'456', byteorder='little', signed=True)))
    5 print(int(True))  # bool -> int

    转换为float

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

    转换为bool


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

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


     

    转换为complex

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

    转换为string


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

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

    转换为bytes


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

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

    转换为list

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

    转换为tuple

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

    转换为set

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

    转换为dict


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

    1、string->dict

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

    1 user_str = '{"name": "xiaowang", "city": "Chengdu", "age": 28}'
    2 import json
    3 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

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

    方式二、二维列表

    1 user_info = [
    2     ["name", "xiaowang"],
    3     ["city", "Chengdu"],
    4     ["age", 28]
    5     ]
    6 print(dict(user_info))  

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


    我的更多文章和专栏:

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

     我的原创杂文汇总

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

  • 相关阅读:
    观光公交
    luogu 4779 【模板】
    最小生成树(luogu 3366)
    计算系数
    更新区间,求单点—— luogu 3368
    HDU
    HDU
    HDU
    HDU
    BFS
  • 原文地址:https://www.cnblogs.com/tiger-python/p/12888299.html
Copyright © 2011-2022 走看看