python3中的列表排序

2024-09-27 04:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python语言解决一个数学组合问题,在这个问题中,我们从8名男性和9名女性组成的小组中选出5名女性占多数的委员会。 我的代码:

import random
people=["m1", "m2", "m3","m4", "m5", "m6" , "m7","m8", "l1", "l2", "l3", "l4", "l5", "l6", "l7", "l8", "l9"]
combinations=[]

for g in range(10000):
    a=random.sample(people, k=5)
    b=a.count("l1")
    b+=a.count("l2")
    b+=a.count("l3")
    b+=a.count("l4")
    b+=a.count("l5")
    b+=a.count("l6")
    b+=a.count("l7")
    b+=a.count("l8")
    b+=a.count("l9")
    if b>=3:
        if a in combinations:
            pass
        else:
            combinations.append(a)

print (len(combinations))

但由于某些原因,这包括重复的群体。这意味着我最后几行代码不能正常工作。在


Tags: 代码l1countrandompeoplel3l2女性
1条回答
网友
1楼 · 发布于 2024-09-27 04:26:06

主要问题是in考虑了顺序。在你的名单里

['l1', 'l2', 'l6', 'm6', 'm8'] != ['l2', 'l1', 'l6', 'm6', 'm8']

所以技巧是对随机选择应用sort,这样就不会以不同的顺序得到相同的组(读:How to efficiently compare two unordered lists (not sets) in Python?)。在

另外,在列表中使用in也是一个性能问题。最好使用set进行快速查找,但是在这种情况下,将您的list转换为tuple(类似于list,但不可变,因此哈希表)以便能够将其放入set。在

最后一个诀窍:你的计数很笨拙。通过检查第一个字母是否是l,在内置的sum函数的生成器理解中,计算由l开始的元素。在

^{pr2}$

相关问题 更多 >

    热门问题