我在一些代码上遇到麻烦。我希望我的代码比较包含多个列表的列表中包含的两个列表,但每个列表仅比较一次。
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)
谢谢您的帮助!
这个想法类似于@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)