【问题标题】:Comparing two lists items in python比较python中的两个列表项
【发布时间】:2010-03-02 14:51:20
【问题描述】:

我有两个文件已加载到列表中。第一个文件的内容是这样的:

d.complex.1
23
34
56
58
68
76
.
.
.
etc
d.complex.179
43
34
59
69
76
.
.
.
etc

第二个文件的内容也一样,只是数值不同。请考虑从一个 d.complex.* 到另一个 d.complex.* 为一组。

现在我有兴趣将一组第一个文件中的每个数值与第二个文件中组的每个数值进行比较。我想记录每个数字在整个第二个文件中出现的次数。

例如,来自 d.complex.1 的数字 23 在不同集合下的文件 2 中可能出现了 5 次。我要做的就是记录文件 2 中数字 23 的出现次数,包括文件 2 的所有集合。

我最初的方法是将它们加载到列表中并进行比较,但我无法做到这一点。我在谷歌搜索并遇到了集合,但作为一个 python 菜鸟,我需要一些指导。谁能帮帮我?

如果您觉得问题不清楚,请告诉我。我还在这里粘贴了完整的文件 1 和文件 2:

http://pastebin.com/mwAWEcTa http://pastebin.com/DuXDDRYT

【问题讨论】:

    标签: python file compare


    【解决方案1】:

    使用 Python 的 open 函数打开文件,然后遍历其所有行。检查该行是否包含数字,如果是,则在defaultdict 实例中增加其计数,如here 所述。

    对另一个文件重复此操作并比较结果字典。

    【讨论】:

      【解决方案2】:

      首先创建一个可以加载给定文件的函数,因为您可能想要维护单独的集合并且还想要计算每个数字的出现次数,最好是为整个文件设置一个字典,其中键是设置名称,例如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
      

      现在您可以轻松编写一个函数来计算给定 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
      

      您可能需要改进文件加载器,例如跳过空行,转换为 int 等

      【讨论】:

      • 好吧,如果它是一个文件,我的任务会很容易,但我必须比较两个列表:(
      • 我不明白,为什么你不能加载这两个文件,从它们中取出字典,然后对这些字典做任何你想做的事情,比较,计算整数,相交集等等等等跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多