python语言,set和list有什么区别?set和list如何相互转化?
发布于 作者:苏南大叔 来源:程序如此灵动~

各种高级编程语言里面,都有set
和list
这两种和array
非常类似的数据类型。事实上,两者是有区别的。在不同的应用场景下,使用set
还是list
,都是有所区分的。set
如何转化为list
?list
又如何转化为set
?这些都是本文中主要阐述的问题。

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述在python
语言中的set
和list
的区别。测试环境:win10
,python@3.6.8
。
简要说明
在苏南大叔的理解中,
set
集合函数,自带unique
属性,自带去重光环,并且没有排序,内部数据输出随机,整体输出的是个对象{}
,内部不可以全部传递数字。list
列表类型,成员可以重复,成员之间有排序,数据输出按顺序输出,是个堆栈[]
。
定义如下:

set()
可以传一个参数,或者不传参数。参数可以是字符串(会被随机打乱输出),也可以是数组。但是不能是数字,否则报错:
list
比较简单,类似于数组[]
,有顺序不会被打乱。
添加成员
这里需要注意的是:set
自带distinct
功能,任何数据添加进去后,只接受新的未知数据,重复数据不会报错。也就是说,上述语句如果执行多次的话,set
内只会有一个s
,而list
内会有多个s
。
去重对比:

删除成员
特别说明的是:.pop()
这个是典型的堆栈操作。
- set 随机
pop
,不一定pop
出谁。 - list 只是
pop
出指定位置的元素。第二次执行的时候,需要注意索引已经变化。

包含判断
两者都可以使用in
做存在性判断,但是注意int
和string
的区别。

修改成员
set
因为无序,所以没有索引的概念,也就无法角标修改成员。不过它天生去重,所以可以先remove
,再add
,效果就是修改了。


相互转化
list
和set
是可以相互转化的,但是由于set
具有天然去重的特性,所以相互转化的过程中可能会碰到数据丢失的问题。

排序问题
list
可以排序,set
天生无序所以无法排序,强制排序后变list
。

成员遍历
两者都可以使用for..in
循环输出。测试代码如下:

合并成字符串
python
里面的字符串join
合并,是极其十分非常的特殊,强烈鄙视!和其它的高级编程语言完全对着干。
而且set
或者list
中出现数字类型的话,就直接报错。真是傲娇的小公主~
解决方案就是:

整体来说,这个join
测试就是大跌眼镜啊...
参考文献
综述
本文从各大方面比较了常见的set
和list
的用法,本文是以python
为例的,在其它语言里面,是否有一些变化,情况未知,待议。不过,本文对于其它高级编程语言,也应该具有一定的参考意义。


