Python实验4 列表与字典应用
目的 :熟练操作组合数据类型。
试验任务:
- 基础:生日悖论分析。如果一个房间有23 人或以上,那么至少有两
个人的生日相同的概率大于50%。编写程序,输出在不同随机样本数
量下,23 个人中至少两个人生日相同的概率。
源码:
import random
def has_duplicate_birthdays():
birthdays = [random.randint(1, 365) for _ in range(23)]
return len(set(birthdays)) != len(birthdays)
def calculate_probability(sample_size):
count = 0
for _ in range(sample_size):
if has_duplicate_birthdays():
count = count + 1
return count / sample_size
不同的随机样本数量
sample_sizes = [100, 1000, 10000, 100000]
for size in sample_sizes:
probability = calculate_probability(size)
print(f"当样本数量为 {size} 时,23 个人中至少两个人生日相同的概率为: {probability:.4f}")
运行截图:
- 进阶:统计《一句顶一万句》文本中前10 高频词,生成词云。
源码:
import jieba
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
def generate_wordcloud(file_path):
try:
# 读取文本文件
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
# 分词
words = jieba.lcut(text)
# 过滤停用词,这里简单过滤单字和一些常见无意义符号
stopwords = set([',', '。', '、', '的', '是', '在', '和', '也', '有', '不'])
filtered_words = [word for word in words if word not in stopwords and len(word) > 1]
# 统计词频
word_counts = Counter(filtered_words)
# 获取前 10 高频词
top_10_words = word_counts.most_common(10)
print("前 10 高频词:")
for word, count in top_10_words:
print(f"{word}: {count}")
# 生成词云
wordcloud = WordCloud(font_path='simhei.ttf',
background_color='white',
width=800,
height=600).generate_from_frequencies(word_counts)
# 显示词云
plt.figure(figsize=(8, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
except FileNotFoundError:
print(f"错误:未找到文件 {file_path},请检查文件路径是否正确。")
except Exception as e:
print(f"发生未知错误:{e}")
file_path = 'yi.txt'
generate_wordcloud(file_path)
运行截图:
- 拓展:金庸、古龙等武侠小说写作风格分析。输出不少于3 个金庸(古
龙)作品的最常用10 个词语,找到其中的相关性,总结其风格。
源码:
import jieba
from collections import Counter
import re # 导入正则表达式模块
def count_word_frequencies(file_path, top_n=10):
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
# 使用 jieba 进行分词
words = jieba.lcut(text)
# 排除一些常见的无意义词汇(停用词)
stopwords = set('的 了 是 在 和 有 个 与 不 一 我 他 以 也 子 之 幺'.split())
filtered_words = [word for word in words if word not in stopwords and len(word.strip()) > 1]
# 增加对标点符号的过滤
filtered_words = [word for word in filtered_words if not re.match(r'^[\W_]+$', word)]
# 统计词频
word_counts = Counter(filtered_words)
# 获取出现频率最高的前 top_n 个词
most_common_words = word_counts.most_common(top_n)
return most_common_words
调用函数并打印结果
file_paths = ['天龙八部.txt', '神雕侠侣.txt']
for file_path in file_paths:
most_common_words = count_word_frequencies(file_path, top_n=10)
print(f"小说《{file_path}》中前十高频词汇为:")
for word, count in most_common_words:
print(f"{word}")
print("\n" + "-"*50 + "\n")
运行截图:
Python实验4 列表与字典应用的更多相关文章
- python字符串、列表和字典的说明
python字符串.列表和字典的说明 字符串.列表.字典 字符串的作用存储一段数据信息.例如 info = '我爱北京天安门' ,在调取的时候可以直接调取,灵活方便,print(info) 就可以把刚 ...
- [转载]Python 元组、列表、字典、文件
python的元组.列表.字典数据类型是很python(there python is a adjective)的数据结构.这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益 ...
- python学习之列表和字典
列表 基本操作>>>len([1,3,4])3 >>>[1,2,3]+[4,5,6] +号两边必须是相同类型[1,2,3,4,5,6] >>> ...
- python 1:列表和字典
初学Python, 对列表和字典的嵌套使用. phoneBook = [] #列表 list peopleInfo = {} #字典 dict i=0 while i<3: peopleInfo ...
- python中的列表和字典
列表和字典的区别: 列表是有序排列的一些物件,而字典是将一些物件(键)对应到另外一些物件(值)的数据结构; 应用场景: 字典 各种需要通过某个值去查看另一个值的场合,也就是一个虚拟的“查询表”,实现方 ...
- python开发技巧---列表、字典、集合值的过滤
主要学习列表,字典,集合表达式的应用: 列表的解析式: 生成一个随机列表: In [4]: datalist = [randint(-10,10) for _ in range(10)] In [5] ...
- Python之路-python数据类型(列表、字典、字符串、元祖)操作
一.列表: 列表的语法,以中括号开通和结尾,元素以逗号隔开.例如:name = [] 列表是以下标取值,第一个元素下标是0,第二个元素下标是1,最后一个元素下标是-1. 1.增加 #name = ...
- Day2 - Python基础2 列表、字典、集合
Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...
- Python 第二篇:python字符串、列表和字典的基本操作方法
本文基于python 3.5.1 python常见的数据类型有字串.列表.元组.字典等,本文将详细介绍每一种数据类型的操作方法. 一:str字串的操作方法: 1.capitalize()--> ...
- Python学习三|列表、字典、元组、集合的特点以及类的一些定义
此表借鉴于他人 定义 使用方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner', ...
随机推荐
- NET中三种主机简单理解
在NET中有三个不同的主机: .NET WebApplication 主机,也称为最小主机. 这是.NET 6中的一个新特性,旨在提供最小的启动时间和内存消耗.最小主机只包括.NET运行时的最基本组件 ...
- [BZOJ2194] 快速傅立叶之二 题解
看名字,然后准备转化为多项式乘法. \[c_k=\sum_{i=0}^{n-k-1}a_{i+k}b_i \] 将 \(a\) 反转,得: \[c_k=\sum_{i=0}^{n-k-1}a_{n-i ...
- 如何通过 Python 实现一个消息队列,为在线客服系统与海外运营的APP对接
我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户. 而我收到的用户需求也越来越多,产品化的 ...
- C语言的头文件包含,竟存在这么多知识点!
文章来自:https://zhuanlan.zhihu.com/p/472808057 相关文章连接:头文件包含是可以嵌套的_[C语言]- 预处理指令3 - 文件包含! 很多事不深入以为自己懂了,但真 ...
- @autowired注解报错原因及解决办法
@autowired 注入dao层的时候,标红报错,但不影响编译使用 按照严格的spring注解方式在dao层加入@Repository注解
- csharp入门经典
C#简介 .NET Framework是Microsoft为开发应用程序而创建的一个具有革命意义的平台,它有运行在其他操作系统上的版本 .NET Framework的设计方式确保它可以用于各种语言,包 ...
- 读论文-序列感知推荐系统(Sequence-Aware Recommender Systems)
前言 今天读的论文为一篇于2018年发表在(ACM computing surveys (CSUR))的论文,这篇文章主要讲述了序列感知推荐系统(Sequence-Aware Recommender ...
- 在 Aspire 项目下使用 AgileConfig
什么是 Aspire .NET Aspire 是一组工具.模板和包,用于构建易于监控的.可投入生产的应用程序..NET Aspire 通过一系列 NuGet 包交付,这些包通过启动或解决现代应用开发中 ...
- python进程 - 调试报错 you are not using fork to start your child processes
在走这段代码的时候报错了,记录一下我的调试过程,感觉有个思路来走就挺好的. 1.报错与解决 文件名字:ClassifierTest.py import torch import torchvision ...
- Dify 和 Manus 的技术架构差异
Dify 框架能够部分实现 Manus 的功能效果,但在复杂任务自动化.多代理协作等领域存在技术差距. 一.核心功能对比 1. 任务拆解与执行能力 Dify:支持通过 Agent 模式 进行任务分解, ...