1. 程式人生 > 實用技巧 >Python容器型別資料的轉換

Python容器型別資料的轉換

容器型別的強制轉換

str強制將資料轉換成字串

str可以轉換所有的資料型別, 在當前的資料型別兩邊套上引號

var = [1, 2, 3]
res = str(var)
# 結果:'[1, 2, 3]' <class 'str'>
print(repr(res), type(res))

repr():原型化輸出字串

list強制將資料轉換成列表

  • 如果原資料型別是字串:把字串中的每個元素單獨拿出來,作為列表中的新元素使用
  • 如果原資料型別是字典:只保留字典中的鍵,忽略字典的值
  • 如果原資料型別是其他容器資料:直接在原資料型別兩邊換上[]
var = "abc123"
res = list(var)
# 結果:['a', 'b', 'c', '1', '2', '3'] <class 'list'>
print(res, type(res))

var = {"a": 1, "b": 2, "c": 3}
res = list(var)
# 結果:['a', 'b', 'c'] <class 'list'>
print(res, type(res))

var = (123,456,"abc")
res = list(var)
# 結果:[123, 456, 'abc'] <class 'list'>
print(res, type(res))

tuple強制將資料轉換成元組

  • 如果原資料型別是字串:把字串中的每個元素單獨拿出來,作為元組中的新元素使用
  • 如果原資料型別是字典:只保留字典中的鍵,忽略字典的值
  • 如果原資料型別是其他容器資料:直接在原資料型別兩邊換上()
var = "abc123"
res = tuple(var)
# 結果:('a', 'b', 'c', '1', '2', '3') <class 'tuple'>
print(res, type(res))

var = {"a": 1, "b": 2, "c": 3}
res = tuple(var)
# 結果:('a', 'b', 'c') <class 'tuple'>
print(res, type(res))

var = {123,456,"abc"}
res = tuple(var)
# 結果:(456, 123, 'abc') <class 'tuple'>
print(res, type(res))

set強制將資料轉換成集合

  • 如果原資料型別是字串:把字串中的每個元素單獨拿出來,作為集合中的新元素使用
  • 如果原資料型別是字典:只保留字典中的鍵,忽略字典的值
  • 如果原資料型別是其他容器資料:直接在原資料型別兩邊換上{}
var = "abc123"
res = set(var)
# 結果:{'3', '2', 'c', 'a', '1', 'b'} <class 'set'>
print(res, type(res))

var = {"a": 1, "b": 2, "c": 3}
res = set(var)
# 結果:{'c', 'a', 'b'} <class 'set'>
print(res, type(res))

var = [123,456,"abc"]
res = set(var)
# 結果:{456, 123, 'abc'} <class 'set'>
print(res, type(res))

擴充套件

強轉空資料時,預設轉換成當前資料型別的一個值

res = ()
# 結果:() <class 'tuple'>
print(res, type(res))

dict強制將資料轉換成字典

  • 要求: 必須是等長的二級容器,並且裡面的元素個數只能是2個
  • 外層可以是列表,元組或集合,裡層是列表或者元組的等長二級容器

外層是列表

# 外層是列表,裡層是列表或者元組
lst = [["a", 1], ("b", 2)]
dic = dict(lst)
# 結果:{'a': 1, 'b': 2} <class 'dict'>
print(dic, type(dic))

外層是元組

# 外層是元組,裡層是列表或者元組
tup = (["a", 1], ("b", 2))
dic = dict(tup)
# 結果:{'a': 1, 'b': 2} <class 'dict'>
print(dic, type(dic))

外層是集合

# 外層是集合,裡層是元組
setvar = {("a", 1), ("b", 2)}
dic = dict(setvar)
print(dic, type(dic))
# 結果1:{'a': 1, 'b': 2} <class 'dict'>
# 結果2:{'b': 2, 'a': 1} <class 'dict'>

集合的特徵:無序,自動去重
字典的鍵和集合的值有資料型別上的要求:
不可變的型別(允許的類型範圍):Number(int、float、complex、bool)、str、tuple
可變的型別(不允許的型別):list、set、dict

例外1

"""
外層是列表或元組,裡層放集合

可以實現,但不推薦使用,
因為集合無序,達不到想要的目的
"""
lst = [["a", 100], {"b", "250"}]
dic = dict(lst)
print(dic)
# 結果1:{'a': 1, 'b': '250'}
# 結果2:{'a': 1, '250': 'b'}

例外2

"""
外層是列表,元組或集合,裡層放字串

字串長度只能是2位,有極大的侷限性,不推薦使用
"""
lst = ["a1","b2"]
# lst = ["a11","b22"]      #Error 
dic = dict(lst)
# 結果:{'a': '1', 'b': '2'}
print(dic)

擴充套件:等長二級容器

外面是容器,裡面的元素也是容器,且元素個數相同

lst = [(1, 2, 3), [4, 5, 6], {7, 8, 9}]

型別判斷

使用方法一

isinstance(資料,型別)

  • 如果該資料是這個型別,返回True
  • 反之,返回False
  • 型別: int、float、complex、bool、str、list、tuple、set、dict
n = 123
res = isinstance(n, int)
print(res)      # True

n = "123"
res = isinstance(n, int)
print(res)      # False

使用方法二

isinstance( 資料, (型別1,型別2,型別3...) )

  • 如果該資料在所對應的型別元組當中,返回True
  • 反之,返回False
  • 型別: int、float、complex、bool、str、list、tuple、set、dict
n = 123
res = isinstance(n, (float, complex, int))
print(res)      # True

n = "123"
res = isinstance(n, (float, complex, int))
print(res)      # False

資料型別判斷:一真則真,全假則假