我有一个列表courses_per_semester,如下所示:
[[['CS105', 'ENG101', 'MATH101', 'GER'], ['ENG102', 'CS230', 'MATH120', 'GER'], ['CS205', 'FREE'], ['GER'], ['CS106', 'CS215', 'CS107', 'ENG204'], ['GER', 'MATH220', 'CS300', 'CS206'], ['CS306', 'GER'], ['FREE'], ['CS312', 'CS450', 'GER', 'CS321', 'FREE'], ['CS325', 'GER', 'CS322', 'MAJOR'], ['CS310', 'STAT205'], [''], ['CS443', 'CS412', 'CS421', 'GER'], ['CS444', 'FREE', 'FREE', ''], ['', '']], [['CS105', 'ENG101', 'MATH101', 'GER'], ['ENG102', 'CS230', 'MATH120', 'GER'], ['CS205', 'FREE'], ['GER'], ['CS106', 'CS215', 'CS107', 'ENG204'], ['GER', 'MATH220', 'CS300', 'CS206'], ['CS306', 'GER'], ['FREE'], ['CS312', 'CS450', 'GER', 'CS321', 'FREE'], ['CS325', 'GER', 'CS322', 'MAJOR'], ['CS310', 'STAT205'], [''], ['CS443', 'CS412', 'CS421', 'GER'], ['CS444', 'FREE', 'FREE', ''], ['', '']], [['CS105', 'ENG101', 'MATH101', 'GER'], ['ENG102', 'CS230', 'MATH120', 'GER'], ['CS205', 'FREE'], ['GER'], ['CS106', 'CS215', 'CS107', 'ENG204'], ['GER', 'MATH220', 'CS300', 'CS206'], ['CS306', 'GER'], ['FREE'], ['CS312', 'CS450', 'GER', 'CS321', 'FREE'], ['CS325', 'GER', 'CS322', 'MAJOR'], ['CS310', 'STAT205'], [''], ['CS443', 'CS412', 'CS421', 'GER'], ['CS444', 'FREE', 'FREE', ''], ['', '']], [['CS105', 'ENG101', 'MATH101', 'GER'], ['ENG102', 'CS230', 'MATH120', 'GER'], ['CS205', 'FREE'], ['GER'], ['CS106', 'CS215', 'CS107', 'ENG204'], ['GER', 'MATH220', 'CS300', 'CS206'], ['CS306', 'GER'], ['FREE'], ['CS312', 'CS450', 'GER', 'CS321', 'FREE'], ['CS325', 'GER', 'CS322', 'MAJOR'], ['CS310', 'STAT205'], [''], ['CS443', 'CS412', 'CS421', 'GER'], ['CS444', 'FREE', 'FREE', ''], ['', '']], [['CS105', 'ENG101', 'GER', 'GER'], ['ENG102', 'CS230', 'MATH120', 'GER'], ['CS205', 'FREE'], ['GER'], ['CS106', 'CS215', 'CS107', 'ENG204'], ['GER', 'MATH220', 'CS300', 'CS206'], ['CS306', 'GER'], ['FREE'], ['CS312', 'CS450', 'GER', 'CS321', 'FREE'], ['CS325', 'GER', 'CS322', 'MAJOR'], ['CS310', 'STAT205'], [''], ['CS443', 'CS412', 'CS421', 'GER'], ['CS444', 'FREE', 'FREE', ''], ['', '']],...]
因此,每个列表都是学生毕业前的一条课程路径,而每个子列表想用每个子列表的所有唯一组合创建一个新列表。更准确地说,我想检查例如courses_per_semester[0][0]是否与courses_perl_semester[1][0]、courses_pers_semester[2][0]、…相同,。。。,courses_per_semester[1500][0]。然后对每个列表的第二个子列表执行相同操作。每次代码找到一个唯一的子列表时,我都希望将组合放在一个新列表中,例如firstrongublict_combinations。但是最重要的是,如果一个学生有这个组合['CS105','ENG101','MATH101','GER'],而另一个学生这个组合['s105','MATH101],'GER','NG101'],那么我希望代码将它们视为相同的。不要把它们放在不同的位置。所以我不在乎订单。因此,第一次公开组合将只进行一次和['CS105','ENG101','MATH101','GER']并
我没有找到这样做的方法。我试着做集合,但集合只接受唯一的值,在某些列表中,我有超过1个空项,它需要一个我不能接受的1。
我尝试做的是:
for i in range(0,len(courses_per_semester)-1):
for j in range(i,len(courses_per_semester[i])):
if courses_per_semester[i][j]==courses_per_semester[i+1][j]:
first_sublist_combinations.append(courses_per_semester[i][j])
但它不起作用,因为我可能没有以正确的方式思考它。我还将列表转换为一个集合
course_sets_per_semester = [[set(courses_per_semester) for courses_per_semester in sublist] for sublist in courses_per_semester]
但像这样,它只给我一次字符串,即使它在一个子列表中是两次,所以我不能正确地比较它们,即使我想这样做,因为当它们应该相同时,一个子列表的长度会比另一个子列表小。
例如,firstrongublic_combinations=[['CS105','MATH101','GER','NG101'],['CS105],'MATH101','GER','GER'],..]
假设x
是您的输入列表:
res=list(map(lambda c: list(set(c)), zip(*map(lambda a: list(map(lambda b: tuple(sorted(b)), a)), x))))
根据您的示例输出:
[[('CS105', 'ENG101', 'GER', 'MATH101')], [('CS230', 'ENG102', 'GER', 'MATH120')], [('CS205', 'FREE')], [('GER',)], [('CS106', 'CS107', 'CS215', 'ENG204')], [('CS206', 'CS300', 'GER', 'MATH220')], [('CS306', 'GER')], [('FREE',)], [('CS312', 'CS321', 'CS450', 'FREE', 'GER')], [('CS322', 'CS325', 'GER', 'MAJOR')], [('CS310', 'STAT205')], [('',)], [('CS412', 'CS421', 'CS443', 'GER')], [('', 'CS444', 'FREE', 'FREE')], [('', '')]]