文件独特行数问题

@Python学习

文件和数据格式化

文件独特行数问题

问题:统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。

我的思路
读入文件,设置一个字典,键为每行内容,值为出现次数,通过for循环遍历,使用dic[i] = dic.get(i, 0) + 1来实现内容出现次数的统计,最后遍历筛选,统计出现次数为一次的行数。
实现代码

f = open('latex.log', "r", encoding = 'utf-8')
dic = {}
for i in f:
    dic[i] = dic.get(i, 0) + 1
f.close()
count = 0
for k in dic.keys():
    if dic[k] == 1:
        count += 1
print("共{}独特行".format(count))

运行后结果正确,但看了下参考答案,发现自己写的还是略显笨拙。

参考答案

f = open("latex.log")
ls = f.readlines()
s = set(ls)
for i in s:
    ls.remove(i)
t = set(ls)
print("共{}独特行".format(len(s)-len(t)))

思路解析:
文件的所有行都是由两部分组成,即独特行和重复行。为统计独特行的个数,可以挨个找出累加独特行,也可以用总行数减去重复行。

  1. 利用f.readlines()将文件以行为元素储存入列表;
  2. 利用集合去重的特性将上步取得的列表转化为集合,集合包含独特行与重复行的代表;
  3. 遍历集合,利用remove()方法将集合中的所有元素在列表中都删除一个,这样一来列表中剩下的就是所有重复行;(ls.remove(x), 将列表ls中第一次出现的元素x删除)
  4. 将只剩重复行的列表化为集合,通过len()取得总行数与重复行数,二者求差得到独特行数。
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值