![](/img/trans.png)
[英]Returning all objects in list which have the same attribute as another 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.