【问题标题】:Returning min score返回最低分数
【发布时间】:2017-08-30 20:17:42
【问题描述】:

这是我的代码,它从多个成员组成组,然后对每个组进行评分,然后将它们相加以获得本例中 4 个组的总分。

import random

def run(members, n_groups):
    participants = list(range(1,members+1))*n_groups
    random.shuffle(participants)

    my_groups = list(zip(*[iter(participants)]*members))
    print(my_groups)

    def get_rating(group):
        return (len(set(group)))

    score = ((sum(get_rating(g) for g in my_groups)))
    print(score)
    return score

members = 4
n_groups = 4

print(min(run(members, n_groups) for _ in range(10)))

输出:

[(3, 3, 4, 1), (4, 2, 3, 1), (2, 3, 2, 4), (1, 1, 4, 2)]
13
[(3, 1, 1, 4), (2, 3, 2, 4), (1, 4, 1, 2), (3, 2, 4, 3)]
12
[(2, 4, 4, 1), (3, 3, 1, 3), (3, 1, 2, 2), (4, 4, 2, 1)]
11
[(3, 1, 4, 1), (3, 1, 2, 1), (2, 2, 4, 4), (3, 2, 3, 4)]
11
[(1, 1, 3, 1), (2, 2, 3, 1), (3, 2, 4, 4), (4, 4, 3, 2)]
11
[(3, 2, 1, 2), (4, 1, 3, 4), (4, 2, 3, 1), (1, 2, 4, 3)]
14
[(2, 4, 3, 1), (3, 4, 4, 2), (1, 1, 2, 1), (3, 3, 4, 2)]
12
[(3, 3, 1, 2), (2, 1, 3, 3), (2, 4, 4, 2), (4, 1, 1, 4)]
10
[(1, 4, 3, 2), (4, 2, 3, 3), (3, 1, 2, 1), (4, 4, 1, 2)]
13
[(2, 4, 1, 3), (3, 2, 2, 3), (1, 4, 1, 3), (1, 4, 2, 4)]
12
10

所以每个组都会得到一个评分,然后最低分数显示在底部,有没有办法可以重新打印获得该最低分数的组?因为如果我尝试使用 100,000,我很难检查每一个以找出它来自哪个组!

我试过了:

import random

def run(my_groups, score):
    participants = list(range(1,members+1))*n_groups
    random.shuffle(participants)

    my_groups = list(zip(*[iter(participants)]*members))
    print(my_groups)

    def get_rating(group):
        return (len(set(group)))

    score = ((sum(get_rating(g) for g in my_groups)))
    print(score)
    return score

members = 4
n_groups = 4

print(min(run(members, n_groups) for _ in range(10), key=lambda x:x[1]))

但这会返回“如果不是唯一参数,则生成器表达式必须用括号括起来”为括号运行?

【问题讨论】:

  • 那么您想跟踪哪个组的得分最低?
  • 最后是这样:对于这种情况,10 然后 [(3, 3, 1, 2), (2, 1, 3, 3), (2, 4, 4, 2) , (4, 1, 1, 4)],它来自的组

标签: python grouping min


【解决方案1】:

run 更改为返回my_groups, score

然后改变

min(run(members, n_groups) for _ in range(10))

min((run(members, n_groups) for _ in range(10)), key=lambda x:x[1])

这使得min 返回整个(my_groups, score) 元组,但只比较score(元组的第二个元素)以找到最小值。

【讨论】:

  • 您好,谢谢!试过了,把它放在帖子的编辑中,你能看到哪里出了问题吗?
  • 虽然你得到的错误应该足以告诉你如何解决这个问题
  • 听起来你没有做答案的第一部分
【解决方案2】:
import random


def run(members, n_groups):
    participants = list(range(1, members + 1)) * n_groups
    random.shuffle(participants)

    my_groups = list(zip(*[iter(participants)] * members))
    return my_groups


def get_rating(group):
    return len(set(group))


def score(my_groups):
    return sum(get_rating(g) for g in my_groups)


best = min(*(run(4, 4) for _ in range(10)),
           key=score)
print(best)
print(score(best))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多