ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

python语言,set和list有什么区别?set和list如何相互转化?

python语言,set和list有什么区别?set和list如何相互转化?

语言, set和list有什么区别? set和list如何相互转化? 作者: 苏南大叔 来源: 程序如此灵动~2022年05月02日 联系我:

我们对当前这种情况持有非常正面的看法, 觉得这个世界是非常好的, 而且你也好, 我也好, 大家都不好。因此, 我们希望大家可以去玩一下解压小游戏吧!

在那些高级编程语言环境下面, 都存在set这种数据类型和list这种数据类型, 而且这两种数据和array数据相比起来也是类似的。实际上来说的话, 这两者之间是存在着区别的。

针对不同应用场景这个情况, 是使用set还是使用list, 那都是有所区分的。把set转化成list这个事是怎么做的? 或者反过来, 把list转化成设成set这个事又该怎么操作? 这些内容, 都算是本文主要阐述的那个问题范畴里面的事情了。

语言,set和list有什么区别?set和list如何相互转化?(图11-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述在语言中的set和list的区别。测试环境:win10,@3.6.8。

简要说明

依照苏南大叔他本人的那个想法和认知来看。

定义如下:

_set = set()

_set = set([1,2,3])

_set = set(["sunan","is","best"])

_set = {"sunan","is","best"}

_set = set("uncle sunan")

_set = set(1) ## 报错

语言是指和这两者之间究竟存在哪些差异呢? 另外, 还要弄清楚这两个东西是怎么互相转换的? 这部分内容可以参考图11-2。

set()这个函数是可以传一个参数进去的, 或者干脆就不传任何参数。那个参数你可以把它设定成字符串类型, 这种情况下它会被系统按照随机的顺序给打乱然后输出出来, 你也可以把它设定成数组形式。但是呢, 你绝对不能传数字进去, 要是传了数字的话程序就会报错。

TypeError: 'int' object is not iterable

这个list其实不算复杂, 它跟数组比较像, 具有顺序的特点, 里面的内容不会被打乱。

_list = []

_list = ["sunan","is","best"]

添加成员

_set.add("s")

_list.append("s")

大家在这儿得留神, 那set它自己里头有个现成的毛病, 你不管往里面塞啥数据, 只要你新来的那货是它以前没见过的, 它才算认可接纳;可是你要是塞个重复的玩意儿进去, 系统可不会给你抛错误啊。

这话说的啥意思? 就是说你要把上面那句话去反复跑上好几遍, 那么在那个set容器内部, 最后也就只老老实实待着一个“s”;但是在list那边边儿上, 却能堆积出好几个“s”出来。

去重对比:

_set = set()

_list = []

for i in "aaabbc":

_set.add(i)

_list.append(i)

print(_set,_list)

语言,set和list有什么区别?set和list如何相互转化?(图11-3)

删除成员

_set = {"a","b","c","d","e"}

_list = ["a","b","c","d","e"]

_set.remove("a")

_list.remove("a")

_item_set = _set.pop()

_item_list = _list.pop(2)

print(_set,_list)

print(_item_set,_item_list)

这里需要特别加以说明的是, .pop()这个操作它属于那种非常典型的、专门用来处理堆栈的相关操作。

语言层面来说, set和list这两者到底有什么区别呢? 接着我们来看看set与list之间是如何进行相互转换的。(图11-4)

包含判断

这俩种情形都能用in这个操作用来做个存在与否的判断, 可是大家得睁大眼睛瞧仔细了, int这个玩意儿和其他的是有差别的。

_set = {9,5,2,7}

_list = [9,5,2,7]

print ("7" in _set)

print (7 in _set)

print ("a" in _list)

语言,set和list有什么区别?set和list如何相互转化?(图11-5)

修改成员

因为序列集合是无序这个原因, 所以根本就没有索引概念在里头, 也因此没法通过角标的方式去修改里面的成员。然而它生来就有去重的本领, 所以呢, 可以先做移除掉原来那个旧的值这个操作, 然后再做添加到集合里边的操作,这样一折腾之后, 效果其实就等于把那个成员给改了。

_set = {"a","b","c"}

_dict ={"b":"e"}

_target = "b"

if (_target in _set) and (_dict[_target] not in _set):

_set.remove(_target)

_set.add(_dict[_target])

print(_set)

else:

print("修改失败")

语言,set和list有什么区别?set和list如何相互转化?(图11-6)

_list[0] = "sunan"

语言,set和list有什么区别?set和list如何相互转化?(图11-7)

相互转化

关于list和set这两者, 它们是能够完成相互之间的转化操作的。但是因为set这个东西, 它具有那种天然就把重复数据去掉的特点。所以在进行这种相互转化的时候, 很有可能会碰到数据丢失这样一种情况。

_list = ["a","a","b"]

_set = set(_list)

_list = list(_set)

语言,set和list有什么区别?set和list如何相互转化?(图11-8)

排序问题

这个所谓的列表它能够被进行排序操作, 而那个名为集合的东西它在本质上就是杂乱无章的状态, 所以它是没有办法来执行排序任务的, 如果你执意要对它进行排序的话, 那么它就会变成那种可以被排列的列表形式。

_list = [9,5,2,7]

# _list2 = _list.sort() #没有返回值

_list.sort()

print(_list)

_set = set(_list)

# _set.sort() # 报错 AttributeError: 'set' object has no attribute 'sort'

_list3 = sorted(_set) # 有返回值

print(_set,type(_list3),_list3)

语言,set和list有什么区别?set和list如何相互转化?(图11-9)

成员遍历

这两个家伙, 都是能够让大伙儿拿那个 for..in 这个循环操作给输出出来的。下面这一段代码, 就是专门用来拿去测试的那个代码部分。

_set = {9,5,2,7}

_list = [9,5,2,7]

for i in _set:

print(i)

for i in _list:

print(i)

关于语言这一点儿事情来说, 我们要弄明白的是, set和list这两个东西之间到底存在什么样的区别? 另外, 人们还经常想知道的问题就是, set这种东西和list这种东西之间要怎样才能达到相互之间进行转化的目的? 请看图11-10。

合并成字符串

里面那个字符串通过join进行合并操作, 它是属于极其、十分、非常特殊的一种情况, 对此我们感到非常强烈的鄙视!因为它和其他的那些高级编程语言完全是处于对着干的状态。

# _set = {9,5,2,7}

# _list = [9,5,2,7]

_set = {"sunan","is","best"}

_list = ["sunan","is","best"]

_str1 = " ".join(_list) #TypeError: sequence item 0: expected str instance, int found

_str2 = " ".join(_set)

print(_str1)

print(_str2)

_set.add(1)

_list.append(1)

_str1 = " ".join('%s' %id for id in _set)

_str2 = " ".join('%s' %id for id in _list)

print(_str1)

print(_str2)

另外, 当集合或者是列表里出现了数字类型的数据的时候, 它就会直接抛出错误消息, 这种状态简直就是像一位非常娇气的小公主一样。

TypeError: sequence item 0: expected str instance, int found

解决方案就是:

" ".join('%s' %id for id in _set)

语言里面的 set 和 list 有什么区别呢, set 和 list 怎么进行相互转化, 这个具体内容请参考图 11-11。

从总体的情况来看, 大家都会发现这个关于join的测试结果是让人感到非常意外的, 这种情况可以参考相关的文献来进行综述。

本文从各个不同的方面对常见的集合和列表的用法进行了比较, 因为本文是以Java作为示例来进行展开阐述, 所以在其它类型的编程语言当中, 具体的使用方式和逻辑结构会不会出现一定的不同或者变化这样的情况目前还属于未知的状态, 这一点还需要大家进一步地讨论和研究。

不过可以确定的是, 这篇文章的内容对于其他那些高级编程语言的开发者来说, 也应该具备相应的参考价值和借鉴意义。

如果这篇文章确实能够对您有所帮助, 又或者在某种程度上为您的时间做出了一点节约, 那么还请不要吝啬您的奖励, 不妨通过打赏的方式为我准备一瓶饮料, 以便借此机会来进一步拉近你我彼此之间的朋友关系。

本博客这个地方是不欢迎大家进行各种各样的镜像采集的行为的, 请你一定要尊重一下我们这里写的原创的文章内容, 如果你要进行转载的话请务必把作者的那个链接给保留下去。

这是一个福利活动, 腾讯云最近推出的那个非常火的活动, 购买他们的那个一核二千兆内存的云服务器服务, 第一年只需要花费五十元钱。

源代码、本文里面出现的代码片段, 还有相关的那些软件, 请点击这里来获取更多的具体信息。

【绝密】秘籍文章入口,仅传授于有缘之人

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进