簡體   English   中英

如何將列表中的對象與同一列表中的另一個 object 進行比較?

[英]How to compare an objects in a list to another object that is in the same list?

nrmcdate是按名稱、class 和日期順序排列的列表。 此列表代表學生未參加的 class 和學生未參加的日期。 例如(john, 5537, datetime.datetime(2021, 5, 15, 0, 0))表示 john 在 2021 年 5 月 15 日沒有參加 class 5537

registered_lists是已注冊到該 class 的學生列表。 所以在這個列表中會有重復的名字。 例如。 ('JOHN', 5537), ('JOHN', 5620)表示 john 已注冊到 class 5620 和 5537。

nrmcdate = [
    ('JOHN', 5537, datetime.datetime(2021, 5, 15, 0, 0)),
    ('JOHN', 5620, datetime.datetime(2021, 5, 15, 0, 0)),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5537, datetime.datetime(2021, 8, 3, 0, 0)),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5537, datetime.datetime(2021, 8, 10, 0, 0)),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5558, datetime.datetime(2021, 8, 12, 0, 0)),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5563, datetime.datetime(2021, 8, 12, 0, 0)),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5628, datetime.datetime(2021, 5, 20, 0, 0)),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5628, datetime.datetime(2021, 7, 8, 0, 0)),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5531, datetime.datetime(2021, 5, 7, 0, 0)),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5531, datetime.datetime(2021, 5, 14, 0, 0)),
    ("['KSPKGRMQSNSO']", 5558, datetime.datetime(2021, 5, 11, 0, 0)),
    ("['KSPKGRMQSNSO']", 5558, datetime.datetime(2021, 6, 3, 0, 0)),
    ("['KSPKGRMQSNSO']", 5558, datetime.datetime(2021, 7, 8, 0, 0)),
    ("['KSPKGRMQSNSO']", 5558, datetime.datetime(2021, 7, 15, 0, 0)),
    ("['KSPKGRMQSNSO']", 5558, datetime.datetime(2021, 7, 30, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5530, datetime.datetime(2021, 5, 7, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5530, datetime.datetime(2021, 7, 9, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5530, datetime.datetime(2021, 7, 16, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5530, datetime.datetime(2021, 8, 6, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5540, datetime.datetime(2021, 4, 28, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5540, datetime.datetime(2021, 8, 11, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5541, datetime.datetime(2021, 4, 27, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5541, datetime.datetime(2021, 5, 7, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5541, datetime.datetime(2021, 5, 28, 0, 0)),
    ("['NSPZOPGXWZTEWQZPSHZKSJIZK']", 5546, datetime.datetime(2021, 5, 6, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5531, datetime.datetime(2021, 5, 14, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5532, datetime.datetime(2021, 6, 3, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5532, datetime.datetime(2021, 7, 15, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5535, datetime.datetime(2021, 5, 21, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5556, datetime.datetime(2021, 7, 13, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5561, datetime.datetime(2021, 5, 11, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5561, datetime.datetime(2021, 6, 29, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5561, datetime.datetime(2021, 7, 13, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5620, datetime.datetime(2021, 7, 30, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5626, datetime.datetime(2021, 7, 15, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5643, datetime.datetime(2021, 6, 29, 0, 0)),
    ("['NZAZJPGXWZTEKSWKZOSZKZAJZV']", 5643, datetime.datetime(2021, 8, 10, 0, 0)),
    # Many more rows...
]

registered_list = [
    ('JOHN', 5537),
    ('JOHN', 5620),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5531),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5534),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5537),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5554),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5558),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5563),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5620),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5624),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5628),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5631),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5632),
    ('["KSXXGPSPZQWTS\'SVZCIXZOOZQGO"]', 5635),
    ('["KZGD\'GPUKJTQEZTQ"]', 5618),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5531),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5533),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5536),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5542),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5544),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5548),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5554),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5557),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5562),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5620),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5623),
    ("['ASAZPGXWZKSWKZBASJQZCI']", 5627),
    ("['BZAZJGQEKSO']", 5643),
    ("['BZAZJGQEKSO']", 5645),
    ("['BZAZJGQEKSO']", 5647),
    ("['CEISJQY,UKSCKZSHUK']", 5530),
    ("['CEISJQY,UKSCKZSHUK']", 5554),
    ("['CEISJQY,UKSCKZSHUK']", 5559),
    ("['CEISJQY,UKSCKZSHUK']", 5564),
    ("['CEISJQY,UKSCKZSHUK']", 5598),
    ("['CEISJQY,UKSCKZSHUK']", 5599),
    ("['CEISJQY,UKSCKZSHUK']", 5642),
    ("['CZJ,SGJSZNQMI']", 5531),
    ("['CZJ,SGJSZNQMI']", 5533),
    ("['CZJ,SGJSZNQMI']", 5536),
    ("['CZJ,SGJSZNQMI']", 5542),
    ("['CZJ,SGJSZNQMI']", 5544),
    ("['CZJ,SGJSZNQMI']", 5548),
    ("['CZJ,SGJSZNQMI']", 5554),
    ("['CZJ,SGJSZNQMI']", 5557),
    ("['CZJ,SGJSZNQMI']", 5562),
    ("['CZJ,SGJSZNQMI']", 5620),
    ("['CZJ,SGJSZNQMI']", 5623),
    ("['CZJ,SGJSZNQMI']", 5627),
    ("['CZOJTQIKZE']", 5543),
    ("['CZOJTQIKZE']", 5547),
    ("['CZOJTQIKZE']", 5551),
    ("['CZOJTQIKZE']", 5555),
    ("['UKZSDSHQMU']", 5626),
    ("['UKZSDSHQMU']", 5643),
    ("['UKZSDSHQMU']", 5644),
    ("['UKZSDSHQMU']", 5646),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5538),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5540),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5541),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5620),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5624),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5626),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5631),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5633),
    ("['VOPZOZRM/IOSIZVXTOZQMO']", 5636),
    ("['VVSEZPXWZKSWSJESVXZOOZQGO']", 5542),
    ("['VVSEZPXWZKSWSJESVXZOOZQGO']", 5544),
    ("['VVSEZPXWZKSWSJESVXZOOZQGO']", 5548),
    ("['VVSEZPXWZKSWSJESVXZOOZQGO']", 5555),
    ("['VVSEZPXWZKSWSJESVXZOOZQGO']", 5557),
    ("['ZSJZNZAXQMOWJSZQGAXZOOZQGO']", 5627)
]

目前,我需要將 nrmcdate 的日期與自身進行比較,看看日期是否相隔 3 天。 例如。(不是來自上面的列表) [(Aang, 12, datetime.datetime(2021, 05, 15)),( Ben, 22, datetime.datetime(2021, 05, 12)]因為列表中的對象是相隔三天,它將獲取名稱並與 registerd_lists 進行比較。一旦兩個名稱在注冊列表中匹配,程序將檢查 Aang 和 Ben 是否有共同的 class。output 例如。 (Aang, Ben, 16)這意味着 Aang 和 Ben 在同一個 class 16 中。

我一直在試圖弄清楚如何比較過去幾周的日期,我希望這里有人可以提供解決方案。

我將首先列出所有對

itertools.combinations(nrmcdate, 2) # don't forget to import

然后對於所有對

def common_class(pair, registered):
    person1 = pair[0]
    person2 = pair[1]
    if (abs((person1[2] - person2[2]).days) >= 3): #check if 3 days apart
        if common_classes := set(registered[person1[0]]).intersection(registered[person2[0]]): # they have a common class
            return (person1[0], person2[0], common_classes)
    return None

最后使用以下方法將registered_list列表轉換為字典:

result_dict = {}
for x in registered_list:
    result_dict.setdefault(x[0], []).append(x[1])

然后把這一切放在一起:

import datetime
import itertools

nrmcdate = [("Aang", 12, datetime.datetime(2021, 5, 15)),( "Ben", 22, datetime.datetime(2021, 5, 12))]
registered_list = [('Ben', 5537), ('Aang', 5537)]

itertools.combinations(nrmcdate, 2)

def common_class(pair, registered):
    person1 = pair[0]
    person2 = pair[1]
    if (abs((person1[2] - person2[2]).days) >= 3): #check if 3 days apart
        if common_classes := set(registered[person1[0]]).intersection(registered[person2[0]]): # they have a common class
            return (person1[0], person2[0], common_classes)
    return None

result_dict = {}
for x in registered_list:
    result_dict.setdefault(x[0], []).append(x[1])

print([res for x in itertools.combinations(nrmcdate, 2) if (res := common_class(x, result_dict))])

我希望這有效,它沒有經過真正的測試。

暫無
暫無

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

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