簡體   English   中英

比較python中的兩個列表項

[英]Comparing two lists items in python

我有兩個文件加載到列表中。 第一個文件的內容如下所示:

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的所有集合。

我最初的方法是將它們加載到列表中並進行比較,但是我無法實現這一點。 我在Google中搜索並遇到了集合,但作為python noob,我需要一些指導。 誰能幫我?

如果您覺得問題不清楚,請告訴我。 我還在這里粘貼了完整的文件1和文件2:

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

使用Python的open函數打開文件,然后遍歷其所有行。 檢查線路是否包含一個數字,如果是的話,增加在其計數defaultdict所描述的情況在這里

對其他文件重復此操作,然后比較結果字典。

首先創建一個可以加載給定文件的函數,因為您可能想要維護單個集合,並且還希望計算每個數字的出現,最好是對整個文件有一個字典,其中鍵是集合名,例如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等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM