在python中仅一次比较多个列表

5 python loops list

我在一些代码上遇到麻烦。我希望我的代码比较包含多个列表的列表中包含的两个列表,但每个列表仅比较一次。

resultList = [
    ['Student1', ['Sport', 'History']],
    ['Student2', ['Math', 'Spanish']],
    ['Student3', ['French', 'History']],
    ['Student4', ['English', 'Sport']],
]

for list1 in resultList:
    for list2 in resultList:
        i = 0
        for subject in list1[1]:
            if subject in list2[1]:
                if list2[1].index(subject) >= list1[1].index(subject):
                    i+=1
                else:
                    i+=2
        print(list1[0] + ' - ' + list2[0] + ' : ' + str(i))
Run Code Online (Sandbox Code Playgroud)

打印:

Student1 - Student1 : 2
Student1 - Student2 : 0
Student1 - Student3 : 1
Student1 - Student4 : 1
Student2 - Student1 : 0
Student2 - Student2 : 2
Student2 - Student3 : 0
Student2 - Student4 : 0
Student3 - Student1 : 1
Student3 - Student2 : 0
Student3 - Student3 : 2
Student3 - Student4 : 0
Student4 - Student1 : 2
Student4 - Student2 : 0
Student4 - Student3 : 0
Student4 - Student4 : 2
Run Code Online (Sandbox Code Playgroud)

我想要这个结果:

Student1 - Student1 : 2
Student1 - Student2 : 0
Student1 - Student3 : 1
Student1 - Student4 : 1
Student2 - Student2 : 2
Student2 - Student3 : 0
Student2 - Student4 : 0
Student3 - Student3 : 2
Student3 - Student4 : 0
Student4 - Student4 : 2
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

Pro*_*yag 2

这个想法类似于@yatu的答案,但您可以使用,并仅迭代中当前索引之后enumerate的部分,而不是手动计数。如果你想避免 1-1 2-2 对,只需使用代替。list2list1resultList[idx+1:]resultList[idx:]

resultList = [                                                                                                                 
    ['Student1', ['Sport', 'History']],                                                                                        
    ['Student2', ['Math', 'Spanish']],                                                                                         
    ['Student3', ['French', 'History']],                                                                                       
    ['Student4', ['English', 'Sport']],                                                                                        
]                                                                                                                              

for idx, list1 in enumerate(resultList):                                                                                       
    for list2 in resultList[idx:]:                                                                                             
        i = 0                                                                                                                  
        for subject in list1[1]:                                                                                               
            if subject in list2[1]:                                                                                            
                if list2[1].index(subject) >= list1[1].index(subject):                                                         
                    i+=1                                                                                                       
                else:                                                                                                          
                    i+=2                                                                                                       
        print(list1[0] + ' - ' + list2[0] + ' : ' + str(i))
Run Code Online (Sandbox Code Playgroud)