qq_64123308 2021-12-27 11:49 采纳率: 0%
浏览 34

用python比较四人的大小

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

img

img

  • 写回答

1条回答 默认 最新

  • chuifengde 2021-12-27 15:11
    关注
    暴力法:
    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)}
    '''
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月27日