@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)))
思路解析:
文件的所有行都是由两部分组成,即独特行和重复行。为统计独特行的个数,可以挨个找出累加独特行,也可以用总行数减去重复行。
- 利用f.readlines()将文件以行为元素储存入列表;
- 利用集合去重的特性将上步取得的列表转化为集合,集合包含独特行与重复行的代表;
- 遍历集合,利用remove()方法将集合中的所有元素在列表中都删除一个,这样一来列表中剩下的就是所有重复行;(ls.remove(x), 将列表ls中第一次出现的元素x删除)
- 将只剩重复行的列表化为集合,通过len()取得总行数与重复行数,二者求差得到独特行数。