《最值得收藏的python3语法汇总》之数据类型转换

目录

关于这个系列

概述

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

转换实例

转换为int

转换为float

转换为bool

转换为complex

转换为string

转换为bytes

转换为list

转换为tuple

转换为set

转换为dict


关于这个系列

《最值得收藏的python3语法汇总》,是我为了准备公众号“跟哥一起学python”上面视频教程而写的课件。整个课件将近200页,10w字,几乎囊括了python3所有的语法知识点。

你可以关注这个公众号“跟哥一起学python”,获取对应的视频和实例源码。

这是我和几位老程序员一起维护的个人公众号,全是原创性的干货编程类技术文章,欢迎关注。


概述

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

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

 

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

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

 

Int

Float

Bool

Complex

String

Bytes

List

Tuple

Set

Dict

Int

-

Y

Y

N

Y

Y

N

N

N

N

Float

Y

-

Y

N

Y

Y

N

N

N

N

Bool

Y

Y

-

Y

Y

Y

Y

Y

Y

Y

Complex

Y

Y

Y

-

Y

N

N

N

N

N

String

Y

Y

Y

Y

-

Y

Y

Y

Y

Y

Bytes(只考虑直接转换)

Y

N

Y

N

Y

-

Y

Y

Y

N

List

N

N

N

N

Y

Y

-

Y

Y

Y

Tuple

N

N

N

N

Y

Y

Y

-

Y

Y

Set

N

N

N

N

Y

Y

Y

Y

-

Y

Dict

N

N

N

N

Y

N

Y

Y

Y

-

下面列举了各种类型之间的转换及实例:

转换实例

  • 转换为int

print(int(1.2))  # float -> int
print(int('123'))  # string -> int
print(int(b'456'))  # bytes -> int
print('0x%x' % (int.from_bytes(b'456', 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教程,请查看我的专栏《0基础学python视频教程》

 

  • 13
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值