我试图用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))
但由于某些原因,这包括重复的群体。这意味着我最后几行代码不能正常工作。在
主要问题是
in
考虑了顺序。在你的名单里所以技巧是对随机选择应用
sort
,这样就不会以不同的顺序得到相同的组(读:How to efficiently compare two unordered lists (not sets) in Python?)。在另外,在列表中使用
in
也是一个性能问题。最好使用set
进行快速查找,但是在这种情况下,将您的list
转换为tuple
(类似于list
,但不可变,因此哈希表)以便能够将其放入set
。在最后一个诀窍:你的计数很笨拙。通过检查第一个字母是否是
^{pr2}$l
,在内置的sum
函数的生成器理解中,计算由l
开始的元素。在相关问题 更多 >
编程相关推荐