python之容器类型转换

文章详细介绍了Python中常见容器类型如列表、元组、集合、字符串和字典之间的转换方法,包括转换语法和示例。通过星号表达式展示了如何以简洁的方式输出容器内容。文章还探讨了转换过程中容器的特性,如集合的无序性以及字典转换时只保留键的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

在python中,容器类型转换是基础的语法,而常见的容器类型有列表、元组、集合、字符串、字典,接下来逐一介绍各个容器之间的相互转换

二、语法

要转换成的容器类型(待转换的容器)

三、前言

为了方便大家能看懂接下来的测试,这里我简单提一下星号表达式,它可以将一个可迭代序列中的元素以空格隔开输出在一行,并且末尾不会有多余的空格以下面的代码为例
这是使用星号表达式输出的结果

lst = [1, 2, 3, 4]
print(*lst)
输出:
1 2 3 4

这是我们用循环输出的代码

lst = [1, 2, 3, 4]
for i in lst:
    print(i, end=" ")
输出:
1 2 3 4 

当然,我们可以用一个特判将最后的空格给取消掉,但显然不如星号表达式简洁

四、其他容器转换成字符串类型

1、列表、元组转字符串

lst = [1, 2, 3, 4, 5]
print("原列表:", *lst)
s1 = str(lst)
print("字符串:", *s1)
print("="*50)
t = 1, 2, 3, 4, 5
print("原元组:", *t)
s2 = str(t)
print("字符串:", *s2)
输出:
原列表: 1 2 3 4 5
字符串: [ 1 ,   2 ,   3 ,   4 ,   5 ]
==================================================
原元组: 1 2 3 4 5
字符串: ( 1 ,   2 ,   3 ,   4 ,   5 )

我们可以发现,将列表、元组转换成字符串类型后,列表的"[]"这个中括号也会被转换,包括其中的“,"逗号也被视为强转后的类型,同理我们不妨大胆猜测对集合、字典强转成字符串类型后,它们的逗号(,)、冒号(:)是不是也会被强转成字符串的元素呢?

2、集合,字典转字符串

set1 = {1, 2, 3, 4, 5}
print("原集合:", *set1)
s1 = str(set1)
print("字符串:", *s1)
print("=" * 50)
dict1 = {"name": "Tom", "age": 18}
print("原字典:", dict1)
print(*dict1)
s2 = str(dict1)
print("字符串:", *s2)
输出:
原集合: 1 2 3 4 5
字符串: { 1 ,   2 ,   3 ,   4 ,   5 }
==================================================
原字典: {'name': 'Tom', 'age': 18}
name age
字符串: { ' n a m e ' :   ' T o m ' ,   ' a g e ' :   1 8 }

由此可以发现我们上面的推断是正确的,不过在这里我发现一个有意思的东西就是输出字典的元素时,它输出的是它的key值,同时需要注意的是,虽然集合是无需的,但是在转换成字符串的时候他会根据代码中的顺序进行转换,也就是说,不管运行多少次,输出转换成字符串的集合,结果都是一样的,同时用星号表达式输出集合也是同样的结果,不管运行多少次,结果都是一样的

五、其他容器转换成列表、元组类型

由于列表与元组类似,所以就将它们同一讲了

1、列表、元组的相互转换

lst1 = [1, 2, 3, 4, 5]
print("lst1:", *lst1)
print("lst1类型:", type(lst1))

print("=" * 50)

t1 = tuple(lst1)
print("t1:", *t1)
print("t1类型:", type(t1))

print("=" * 50)

lst2 = list(t1)
print("lst2:", *lst2)
print("lst2类型:", type(lst2))
输出:
lst1: 1 2 3 4 5
lst1类型: <class 'list'>
==================================================
t1: 1 2 3 4 5
t1类型: <class 'tuple'>
==================================================
lst2: 1 2 3 4 5
lst2类型: <class 'list'>

2、集合转换成列表、元组

set1 = {1, 2, 3, 4, 5}
print("set1:", set1)
# 集合转换成列表
lst1 = list(set1)
print("lst1:", lst1)
# 集合转换成元组
t1 = tuple(set1)
print("t1:", t1)
输出:
set1: {1, 2, 3, 4, 5}
lst1: [1, 2, 3, 4, 5]
t1: (1, 2, 3, 4, 5)

3、字典转换成列表、元组

dict1 = {"name": "Tom", "age": 18}
print("dict1:", dict1)
# 字典转换成列表
lst1 = list(dict1)
print("lst1:", lst1)
# 字典转换成元组
t1 = tuple(dict1)
print("t1:", t1)
输出:
dict1: {'name': 'Tom', 'age': 18}
lst1: ['name', 'age']
t1: ('name', 'age')

由此我们可以看到,在对字典进行强转时,我们可以看成是讲字典的每一个key值放在列表或元组里

六、其他容器转换成集合类型

1、列表、元组转换成集合

lst1 = [1, 2, 3, 4, 5]
print("lst1:", lst1)
set1 = set(lst1)
print("s1:", set1)
print("==================================")
t1 = (1, 2, 3, 4, 5)
set2 = set(t1)
print("t1:", t1)
print("set2:", set2)
输出:
lst1: [1, 2, 3, 4, 5]
s1: {1, 2, 3, 4, 5}
==================================
t1: (1, 2, 3, 4, 5)
set2: {1, 2, 3, 4, 5}

2、字符串转换成集合

str1 = "abcde"
print("str1:", str1)
set1 = set(str1)
print("set1:", set1)
输出:
str1: abcde
set1: {'b', 'e', 'd', 'c', 'a'}

当我们在将字符串转换成集合类型后访问,会体现出集合的无序性,到这里,我就疑惑了,为什么会在强转后有时候能体现出集合的无序性,有时候不能呢?我带着这个问题去查了以下,最终得到的答案是因为集合的无序性主要体现在集合的迭代顺序上,即你无法确定集合中元素的顺序。集合类使用哈希表实现元素的存储和查找,不同元素的顺序可能是不确定的,这也是为什么集合元素的顺序是无序的。
列表、元组和字符串转换为集合的情况是不一样的。在 Python 中,列表和元组都是有序的容器类型,所以在转换为集合后,输出的顺序是有序的。列表和元组的顺序是按照它们的顺序进行存储,转换为集合时,也会保留它们的顺序。而对于字符串转换为集合后输出的顺序是随机的,这是因为字符串中的字符出现的顺序并没有特定的规律,所以在转换为集合时,出现的顺序是无序的,每次输出的结果可能不同。
需要注意的是,虽然列表、元组和字符串在转换为集合后输出的顺序可能是有序的或无序的,但是集合的元素本身是无序的,你无法通过下标来访问集合中的元素。

3、字典转换成集合

dict1 = {"name": "Tom", "age": 18}
print("dict1:", dict1)
set1 = set(dict1)
print("set1:", set1)
输出:
dict1: {'name': 'Tom', 'age': 18}
set1: {'age', 'name'}

这里我们就可以发现,在对字典进行强转的时候,字典的键值都会强转后的元素

七、其他容器转换成字典类型

这里我们需要知道的是不管是列表、元组,还是字符串或者集合,都是不能单独转换成字典类型的,那我们应该怎么做呢?
需要指出,任何一个单独的序列都是无法直接转换成字典类型的,哪怕我们将字典转换成字符串后再想转换成字典也是不行的,例如下面的代码

dict1 = {"name": "Tom", "age": 18, "gender": "男"}
s1 = str(dict1)
print(dict(s1))
运行会报错
ValueError: dictionary update sequence element #0 has length 1; 2 is required

所以我们可以先用zip函数打包,然后再转换为字典

str1 = "abcd"
lst1 = [1, 2, 3, 4]
print(dict(zip(str1, lst1)))
输出:
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

这方法可以概括为:
dict(zip(key序列, value序列))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值