然后可以来打印一下它的type,验证一下是不是集合运行,set就是集合的意思。然后再来打印一下data,打印出来的每个字的顺序和一开始给的顺序是不太一样的,所以这也就是为什么看上去是无序的。
为什么会出现这种现象?其实这就得谈到集合的设计了,集合不像列表一样是从左到右这么连续存过来的。虽然像列表这种东西实现起来非常简单,但是如果想往列表里面插入一个数据或者删除一个数据,其实效率是非常低的。所以集合就另辟蹊径,它是以哈希表的方式来进行存储的。
也就是说当创建了一个集合的时候,它会把里面的数据进行哈希,哈希完之后就把数据放到对应的哈希桶统里面去。这样一来整个的随机访问还有查找删除的效率就会高很多。所以如果想像列表一样根据下标来获取里面某个数据是行不通的。

就比如打印一下27,它的位置是2,一运行会发现不支持。通过这个例子,相信应该理解了看上去无序这句话。没有重复值怎么理解?这个就非常简单了,假设后面再来个8,再来个-1,然后运行,会发现虽然这里有12345678八个数据,但是这里只有6个数据打出来,也就是重复的值被踢出去了。
理解完集合的特性之后,再来看一下集合的一些常见的操作。

·首先,比如如果想拿到集合的长度也很简单,len函数就可以了,6。
·如果想往集合里面,再加一个数据,应该怎么加?是这样子data点点什么?add加,然后这个括号里面就可以把要加的数据扔进去,就比如扔一个9,然后再来打印一下data,走,9是不是加进去了?
如果想把9给删了怎么办?也很简单,data.remove,这个和列表里面的差不多,就是要删除哪个数据就把数据的值扔进去,比如要删9,然后再来打印一下,运行,9又没了。
再比如想看一下某个值在不在集合里面,也很简单,用in,比如7in data,运行,在里面,比如17在不在?很明显是不在的。
除了这些基本的增商改查的操作之外,集合还提供了数学意义上集合的一些操作,就比如怎么去算两个集合的交集,两个集合的并集,再或者两个集合相减,也就是集合的减法。
怎么搞?很简单,再搞一个集合,比如data2,里面搞点数据,比如就这个样子,很明显,如果这两个集合相交,那么结果肯定就是它,对吧?所以来试一下,打印一下,data点,intersection,然后里面放上data2,运行,两个集合的交集。
这句话的意思也很明显了,计算集合和集合相交的结果,比如再搞点,走,是不是相交的结果?并集怎么搞?uion相并,运行,看出来了吧?减法怎么搞?也很简单,difference,减就相当于是算出在集合里面,但是不在集合里面的数据,运行一下会发现没有,对不对?
如果后面再随便加个数据,比如13,13是在集合里面,但是没在集合里面出现过的,所以这两个相减肯定会有13,