python - 从 txt 文件中返回每行常见和唯一的单词?
问题描述
我刚刚开始使用 Jupyter 笔记本,并得到了一个我应该写的任务:
编写一个 Python 脚本来查找并按排序顺序输出唯一单词:
- 存在于偶数行和奇数行上。
- 仅在偶数线上
- 仅在奇数行
所有标点符号和大写字母都已删除,因此我们无需担心。
输出应该是这样的
Common words on both lines:
['I', 'the', 'am', 'all', 'as', ...]
Only even lines :
['yellow', 'christmas', 'smell', ...]
Only odd lines:
['yours', 'war', 'may', 'remote', ...]
我开始导入文件
Import pandas as pd
textfile = pd.read_fwf('textfile.txt')
首先,我假设我应该为每一行获取某种列表。然后我想我应该用
for i in rows:
if i % 2 == 0: --even row
else --odd row
我也希望使用该len
功能来查找唯一的单词。以某种方式可以使用诸如not len
查找常用词之类的方法还是更好的解决方案?
解决方案
您当然可以使用 Pandas(或 NumPy)方法来执行此操作,但与许多其他操作不同,对于这一操作,似乎没有它会简单得多。
你想要的是基本的集合操作,而 Pythonset
对象非常适合。如果evens
是出现在偶数行中odds
的所有单词的集合,并且是出现在奇数行中的所有单词的集合,则:
evens & odds
(intersection) 是出现在偶数行和赔率行中的所有单词的集合。evens - odds
(设置差异)是出现在偶数行但不是奇数行的所有单词。odds - evens
反过来也是一样的。
那么,你如何构建这些集合呢?只需遍历文件,而不是将文件导入 Pandas 并遍历行。
您的代码几乎可以按原样运行,但您不能只是这样做for i in rows
- 将每个代码i
变成一行,而不是索引,因此i % 2
毫无意义。你想使用enumerate
这样你就可以得到一行和一个索引:
evens, odds = set(), set()
with open('textfile.txt') as f:
for index, row in enumerate(f):
if index % 2 == 0:
evens.add(row.strip())
else:
odds.add(row.strip())
我在这里假设您的文件是每行一个单词。如果您需要将行拆分为单独的单词,只需使用split
:
if i % 2 == 0:
evens.update(row.split())
else:
odds.update(row.split())
现在,剩下的唯一部分是“按排序顺序”。您只需将集合传递给即可处理sorted
:
common = sorted(evens & odds)
所以剩下的唯一事情就是把所有这些部分放在一起,并决定你想如何在最后输出排序的列表(只是print
会工作,但你可能想要看起来比列表显示更好的东西),你就完成了.
推荐阅读
- c# - 必须打开哪些端口才能与 Firebase 数据库通信(不是 FCM 消息传递)?
- json - 如何从 cURL 获取 JSON 作为批处理文件中的数组
- design-patterns - 这种策略模式的变体有名称吗?
- javascript - 获取css的当前状态
- javascript - 我可以在 React Native 中围绕 ScrollView 属性添加自定义条件吗?
- php - 在php中上传之前预览图像
- r - 具有不同数据帧大小的变量的函数
- css - Bootstrap 固定导航栏在滚动时出现故障和摇晃
- mysql - 搜索产品woocommerce时查询缓慢
- python - AssertionError:未找到清单文件:out/dreqManifest.txt