python类型转换方法_整理了最全的Python3数据类型转换方法,可以收藏当手册用...

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

概述

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

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

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

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

2026099-20200514134755006-59524215.png

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

转换为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 importjson3 print(json.loads(user_str))

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

print(eval(user_str))

方式三、 使用ast.literal_eval

importastprint(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一样

我的更多文章和专栏:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值