我刚开始使用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
之类的东西来查找常用词,还是更好的解决方案?
答案 0 :(得分:0)
您当然可以使用Pandas(或NumPy)方法来执行此操作,但是,与许多其他操作不同,对于此操作,似乎没有它会更简单。
您需要的是基本的集合操作,而Python set
对象则是完美的选择。如果evens
是所有出现在偶数行中的单词的集合,而odds
是所有出现在奇数行中的单词的集合,则:
evens & odds
(交叉点)是同时出现在偶数和奇数行中的所有单词的集合。evens - odds
(设置差异)是所有出现在偶数行而不是奇数行的单词。odds - evens
相反。那么,您如何构建这些集合?只是循环遍历文件,而不是将文件导入Pandas并遍历行。
您的代码几乎可以按原样工作,但是您不能仅执行for i in rows
,这会使每个i
成为行,而不是索引,因此{{ 1}}是没有意义的。您想使用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)
可以工作,但是您可能想要看起来比列表更好的东西)显示),就完成了。