Python数据结构——集合的使用
本文作者:闫续文
文字编辑:杨慧琳
技术总编:张学人
好消息!!!爬虫俱乐部将于2019年7月5日至7月8日在武汉举行首期Python编程技术定制培训。本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python爬虫技术,并明确未来更进一步的学习方向。
详细培训大纲及报名方式,请点击文末阅读原文呦~
Python有四种数据结构,分别是列表list、字典dict、集合set、元组tuple,每种数据结构都有自己的特点,并且都有着独到的用处。在推文《Python数据结构-集合的创建及使用》中,我们介绍了集合的创建和使用,集合是一个无序不重复元素集,基本功能包括关系测试和消除重复元素。集合对象还支持并、交、差、对称差等。在本篇推文中,我们主要介绍集合和列表、元组的区别与交互,并继续介绍一些集合常用的使用案例。
1. 列表、元组和集合
列表类似于一个罗列物品的清单,因此允许有重复项和不同类型的元素,也可以添加、删除和修改元素。列表中的每一个元素都对应着一个位置,这意味着我们可以通过输入位置来查询该位置所对应的元素,如:
basket = ['apple', 'banana', 'egg', 'carrot']
print(basket[1])
元组和列表在结构上相似,区别在于元组不能修改,因此会使元组数据更加安全,不易被改变。元组和列表一样可以被查看索引,如:
name = ('Tom', 'Jack', 'David', 'Bob')
print(name[0])
而集合中的每一个元素是无序的,不能像元组和列表一样被索引。同时,集合包含了不重复的任意对象,因此,集合主要被用来删除数据结构中重复的元素,广泛应用于爬取网页源代码后的去重工作。列表、元组、集合的语法结构如下:
list = [var1,var2,var3,var4]
tuple = (var1,var2,var3,var4)
set = {var1,var2,var3,var4}
结合上述内容,列表、元组和集合三者的异同如下:
(1)从定义语句来看,列表中的元素使用方括号括起来,而元组是圆括号,集合则是花括号。
(2)从元素是否可变来看,列表和集合中的每一个元素都是可变的,可以在列表和集合中添加、删除和修改元素;而元组一旦初始化是不可修改的
(3)从元素是否有序来看,列表和元组中的元素是有序的,也就是说每一个元素都有一个明确的位置(或者说索引值);集合中的每一个元素是无序的,包含不重复的任意对象。
(4)从可以包含的元素类型来看,列表、元组和集合都可以容纳Python中的任何对象,包括整数、浮点数、函数、布尔值、列表、元组、字典等。
2. 集合与列表、元组、字典、字符串的交互
在使用Python的过程中,经常会有不同数据结构之间、以及不同数据结构与字符串之间相互转换的需求。由于集合是不重复的,所以通常可以对字符串、列表、元组进行去重操作。我们主要介绍以下几种交互:
列表转集合(去重)
list1 = [1, 1, 2, 2, 2, 3, 3, 3]
set(list1)
集合转列表
set1 = {'a', 'b', 'c'}
list(set1)
元组转集合(去重)
tup1 = ('d', 'd', 'e', 'e', 'f')
set (tup1)
集合转元组
set2 = {'d', 'e', 'f'}
tuple (set2)
字典转集合
dic1 = {'a':1,'b':2, 'c':3}
set(dic1)
字符串转集合(去重)
str = 'aabbccdd'
set(str)
集合转字符串
set4 = {'x', 'y', 'z'}
''.join(set4)
3. 遍历集合中的元素
s1 = set([1, 2, 3, 4, 5])
for i in s1:
print(i)
由于集合是一个无序不重复元素的集,故不能直接通过下标来获取元素。在这里,我们可以通过enumerate() 函数,列出集合中的元素及元素下标。
enumerate() 函数主要用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中,语法结构如下:
enumerate(sequence, [start=0])
sequence:一个序列、迭代器或其他支持迭代的对象。在这里就是集合变量。
start:下标起始位置。
for index, data in enumerate(s1):
print(index, data)
通过这种方式,我们就能够列出集合中的元素,并为每个元素添加下标。
4. 将集合中的值变为有序
集合是无序的,但我们也可以通过sorted函数以有序的形式从集合中提取元素。
set_fruit = {'apple', 'banana', 'orange', 'pear', 'grape'}
sorted(set_fruit, reverse = True) #按照字母降序(Z-A)输出集合set_fruit中的值
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。