《最值得收藏的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視頻教程》

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章