在Python编程语言中,模块是一种包含Python语句和定义的文件,它也可以包含可执行的代码。将相关的模块组织在一起,可以使代码更加易于理解和使用,同时保持代码的整洁和有序。本文作为数据科学博客大赛的一部分发布。
如果已经了解模块是什么,可以跳过这部分。以下是一个简单的示例,展示如何从一个名为math的模块中导入特定的属性sqrt()平方根函数。
from math import sqrt
print(sqrt(4))
# 输出: 2.0
现在已经了解了Python集合模块的含义,让深入了解一些模块。
集合模块包括一些不同类型的容器。容器帮助存储不同类型的对象,并提供访问和迭代它们的方法。本文将介绍以下容器:
假设想要计算容器中每个元素出现的次数,可以使用计数器函数。以下是一个示例:
from collections import Counter
# 初始化一个包含随机数字的列表,并打印每个元素的出现次数
random_list = [1,2,2,3,32,25,2,423,43,3432,3,52,54,5,5345,344,3344,5,54354,34,454]
Counter(random_list)
另一个字符串的示例:
string = "将统计这句话中的单词数量:数据分析社区汇集了数据实践者、思想领袖和企业,利用数据为他们的企业创造价值。"
word = string.split()
Counter(word)
知道字典通过键值对存储元素,类似于映射,键必须是唯一的且不可变的。这里将看看普通字典和默认字典的区别。
# 创建一个简单的字典并打印它
normal_dict = {'A':1,'B':2,'C':3,'D':4,'E':5}
normal_dict
# 现在调用键A
normal_dict['A']
# 输出1,如预期
# 但如果尝试调用一个不存在的键呢?
normal_dict['F']
# 会抛出KeyError,因为这个键不存在于字典中。在某些情况下,特别是当执行for循环时,可能想要快速添加尚未存在于字典中的键,这时可以使用默认字典。默认字典之所以得名,是因为它在可能发生键错误的情况下分配一个默认值。
# 以下是如何创建默认字典的示例:
from collections import defaultdict
default_d = {'A':1,'B':2,'C':3,'D':4,'E':5}
default_d = defaultdict(lambda: 0)
default_d['F']
# 这里不再得到错误,而是自动分配了一个默认值。
# 例如,考虑达美乐的菜单。菜单包括比萨、饮料和小食。将所有项目及其价格存储为项目-价格对。
Pizza = {'Farmhouse': 300, 'Chessy-7': 250}
Drinks = {'Coca-Cola':80,'Pepsi':80,'Red-bull':100}
SideOrders = {'Garlic Bread':120,'Tacos':90}
# 现在可以使用链映射构建一个覆盖这些不同字典的单个字典。
from collections import ChainMap
Menu = ChainMap(Pizza,Drinks,SideOrders)
# 现在可以像使用单个字典一样使用Menu字典:
Menu['Pepsi']
# 在构建链映射时,只是在构建一个字典链。在查找菜单中的项目时,首先查找比萨,然后是饮料,最后是小食。
# 如果想要添加一个新的比萨,只需写:
Pizza['Margherita'] = 100
Menu['Margherita']
# 这是链映射的可更新功能!
# 它还有一个很棒的字符串表示:
ChainMap({'Farmhouse': 300, 'Chessy-7': 250, 'Margherita': 100}, {'Coca-Cola': 80, 'Pepsi': 80, 'Red-bull': 100}, {'Garlic Bread': 120, 'Tacos': 90})
# 因此,使用链映射肯定会使代码更加优雅。
# 创建一个普通元组并添加值:
normal_tuple = (10,20,30)
normal_tuple[1]
# 输出:20
# 这是一个非常小的元组,这意味着如果想要获取,比如说20,可以看到它在索引1,然后得到了10。
# 所以只需要查看索引并传递它,就可以了。
# 现在,在某些情况下,可能有一个大的元组,或者可能不记得哪个值在哪个索引。所以命名元组将不仅有数值连接到值,而且还会有一个命名索引对应于该值。
# 让展示一下这意味着什么:
from collections import namedtuple
Article = namedtuple('Article',['title','domain','number_of_words'])
Sentimental_analysis = Article('Sentimental_analysis','NLP','1000')
Sentimental_analysis
# 现在如果看Article,它看起来像是在面向对象编程中创建的对象和元组本身的混合。
# 所以本质上,它就像之前创建的元组,有10,20,30。但请注意,每个值都有一个关联。
# 现在调用
Sentimental_analysis.domain
# 就像它们只是属性一样。
# 甚至可以使用索引来调用,如果需要的话,
# 所以集合模块的内容就是这些。