【发布时间】:2022-11-03 18:31:10
【问题描述】:
我有大约 95,000,000 个排列要检查。 我有 8 个不同长度的列表,每个字符串标识在 Excel 表中定义的属性(a-k)。 例如
bcdgj
具有属性 b、c、d、g 和 j
我只需要找到一个包含每个属性至少 3 个的排列,然后将这些属性与电子表格中的数据匹配
我已经制作了这个脚本(我第一次尝试使用 python)
import numpy
import itertools
for x in itertools.product(['abfhj','bcdgj','fghij','abcj','bdgk','abgi','cdei','cdgi','dgik','aghi','abgh','bfhk'],['cdei','bcdgj','abcgi','abcj','abfj','bdfj','cdgi','bhjk','bdgk','dgik'],['afhk','cdgik','cegik','bdgi','cgij','cdei','bcgi','abgh'],['fhjk','bdgij','cgij','abk','ajk','bdk','cik','cdk','cei','fgj'],['abe','abcf','afh','cdi','afj','cdg','abi','cei','cgk','ceg','cgi'],['cdgi','bcgj','bcgi','bcdg','abfh','bdhi','bdgi','bdk','fhk','bei','beg','fgi','abf','abc','egi'],['bcdgik','cegik','chik','afhj','abcj','abfj'],['ceg','bcfg','cgi','bdg','afj','cgj','fhk','cfk','dgk','bcj']):
gear = ''.join(x)
count_a = gear.count('a')
count_b = gear.count('b')
count_c = gear.count('c')
count_d = gear.count('d')
count_e = gear.count('e')
count_f = gear.count('f')
count_g = gear.count('g')
count_h = gear.count('h')
count_i = gear.count('i')
count_j = gear.count('j')
count_k = gear.count('k')
score_a = numpy.clip(count_a, 0, 3)
score_b = numpy.clip(count_b, 0, 3)
score_c = numpy.clip(count_c, 0, 3)
score_d = numpy.clip(count_d, 0, 3)
score_e = numpy.clip(count_e, 0, 3)
score_f = numpy.clip(count_f, 0, 3)
score_g = numpy.clip(count_g, 0, 3)
score_h = numpy.clip(count_h, 0, 3)
score_i = numpy.clip(count_i, 0, 3)
score_j = numpy.clip(count_j, 0, 3)
score_k = numpy.clip(count_k, 0, 3)
rating = score_a + score_b + score_c + score_d + score_e + score_f + score_g + score_h + score_i + score_j + score_k
if rating == 33:
print(x)
print(rating)
我已经调整了评级要求以测试它是否有效,但它需要一段时间来处理 95,000,000 个排列。有人有什么建议让它运行得更快吗? 我想我已经尽可能地减少了每个列表中的值的数量,数据来自的 excel 表每个列表有数百个条目,我已经设法将它减少到每个列表 6-12 个。
【问题讨论】:
-
我很难理解你的问题。一个字符(字母)是属性还是字符串是属性?您能否举例说明什么是“好”排列和什么是“坏”排列,为什么?
标签: python optimization bigdata permutation