在Python中比较两个列表项
我有两个文件,已经把它们的内容加载到列表里。第一个文件的内容大概是这样的:
d.complex.1
23
34
56
58
68
76
.
.
.
etc
d.complex.179
43
34
59
69
76
.
.
.
etc
第二个文件的内容也是类似的,只是数字值不同。请把从一个 d.complex.* 到另一个 d.complex.* 的部分看作一组。
现在我想比较第一文件中每组的数字值和第二文件中每组的数字值。我想记录每个数字在第二文件中出现的次数。
举个例子,数字 23 在 d.complex.1 中可能在第二文件的不同组里出现了 5 次。我只想记录数字 23 在第二文件中出现的总次数,包括所有组。
我最开始的想法是把它们加载到列表中进行比较,但我没能做到。我在谷歌上查找了一下,发现了集合这个概念,但作为一个 Python 新手,我需要一些指导。有人能帮我吗?
如果你觉得我的问题不清楚,请告诉我。我也把文件 1 和文件 2 的完整内容贴在这里:
2 个回答
2
首先,用Python的 open
函数打开文件,然后逐行读取文件的内容。接着,检查每一行是否包含数字,如果有,就在一个 defaultdict
实例中增加这个数字的计数,具体方法可以参考 这里。
对另一个文件也做同样的操作,然后比较这两个字典的结果。
1
首先,你需要创建一个函数,用来加载指定的文件。这样做的好处是,你可以管理不同的数字集合,并且还可以统计每个数字出现的次数。最好的方法是为整个文件使用一个字典,字典的键是集合的名称,比如“complex.1”等等。对于每个这样的集合,再用一个字典来存储集合中的数字,下面的代码会更清楚地说明这一点。
def file_loader(f):
file_dict = {}
current_set = None
for line in f:
if line.startswith('d.complex'):
file_dict[line] = current_set = {}
continue
if current_set is not None:
current_set[line] = current_set.get(line, 0)
return file_dict
现在你可以很容易地写一个函数,来统计在给定的文件字典中某个数字的出现次数。
def count_number(file_dict, num):
count = 0
for set_name, number_set in file_dict.iteritems():
count += number_set.get(num, 0)
return count
比如,这里有一个使用示例。
s = """d.complex.1
10
11
12
10
11
12"""
file_dict = file_loader(s.split("\n"))
print file_dict
print count_number(file_dict, '10')
输出结果是:
{'d.complex.1': {'11': 2, '10': 2, '12': 2}}
2
你可能需要改进文件加载的功能,比如跳过空行,或者将字符串转换为整数等等。