本文基于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實戰案例原始碼匯總 - 持續更新中
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146935.html
標籤:Python
上一篇:gather函式
