我在处理一些代码时遇到了问题。我希望我的代码比较多个列表的列表中包含的 2 个列表,但每次只比较一次。
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))
这会打印:
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
我想要这样的结果:
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
感谢您的帮助!
最佳答案
我要么使用 itertools.combinations_with_replacement
或 itertools.combinations
为此:
In [1]: resultList = [
...: ['Student1', ['Sport', 'History']],
...: ['Student2', ['Math', 'Spanish']],
...: ['Student3', ['French', 'History']],
...: ['Student4', ['English', 'Sport']],
...: ]
...:
In [2]: import itertools
In [3]: new_result = itertools.combinations_with_replacement(resultList, 2)
In [4]: for lists_tuple in new_result:
...: list1, list2 = lists_tuple
...: 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))
...:
...:
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
组合
如果您决定不想将每个列表与其自身进行比较(Student1
- Student1
),请将 combinations_with_replacement
更改为 combinations
并且您将获得列表中不同元素之间的比较:
Student1 - Student2 : 0
Student1 - Student3 : 1
Student1 - Student4 : 1
Student2 - Student3 : 0
Student2 - Student4 : 0
Student3 - Student4 : 0
关于python - 在python中每次只比较多个列表一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56356237/