用python比较四人的大小

麻烦问下大家怎么排列,这道题的思路我不太明白,救救。

img

img

暴力法:
import itertools as it

data = [[('马克', 4), ('波力', 1), ('尼克', 2), ('马尼', 3)],
        [('马克', 1), ('波力', 4), ('尼克', 3), ('马尼', 2)],
        [('马克', 3), ('波力', 1)],
        [('马克', 4), ('波力', 3), ('尼克', 1), ('马尼', 2)]]
tmp = []
for i in data[2]:   # 以第三次猜作为切入口
    t0 = [j for j in data[0] if i[0] not in j or i == j]  # 第1次猜的要么有一种与第三次一模一样,要么就不能出现第三次中的名字
    t0 = list(it.combinations(t0, 2))                       # 有一半对,就取两个组合
    t1 = [j for j in data[1] if i[0] not in j or i == j]  # 第2次猜的要么有一种与第三次一模一样,要么就不能出现第三次中的名字
    t1 = list(it.combinations(t1, 2))                       # 有一半对,就取两个组合
    t3 = [j for j in data[3] if i[0] not in j or i == j]  # 第4次猜的要么有一种与第三次一模一样,要么就不能出现第三次中的名字
    t3 = list(it.combinations(t3, 2))                       # 有一半对,就取两个组合
    
    result = list(it.product(t0, t1, t3))                   # 对上面第1,2,4次进行组合
    for k in result:                                       # 遍历组合,并用集合对每一组合合并
        eee = set()
        for kkk in k:
            eee |= set(kkk)
        if len(eee) == 4:                                   # 将猜的结果有4个不同的选出,另再筛选
            tmp.append(eee)

for i in tmp:                                               # 对上面长度为4个的,选出人名和排行都唯一的结果
    if len(dict(i).keys()) == 4:
        print(i)
'''--result
{('马尼', 2), ('尼克', 3), ('波力', 1), ('马克', 4)}
'''