Python容器类型数据的转换

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

数据类型判断:一真则真,全假则假

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Python容器类型数据的转换