如何解决这个问题呢?请帮帮我。我需要通过 itertools 和产品。我能够解决它,但结果非常巨大。有没有可能以某种方式让它变得更短和更长?
from itertools import *
k = 0
for x in product('0123456789abcdef', repeat = 5):
s = ''.join(x)
if s[0] != '0' and ((s.count('0') == 1 and (s.count('1') + s.count('2') + s.count('3') +s.count('4') +s.count('5') +s.count('6') +s.count('7') +s.count('8') +s.count('9')) == 0)\
or (s.count('1') == 1 and (s.count('0') + s.count('2') + s.count('3') +s.count('4') +s.count('5') +s.count('6') +s.count('7') +s.count('8') +s.count('9')) == 0)\
or (s.count('2') == 1 and (s.count('0') + s.count('1') + s.count('3') +s.count('4') +s.count('5') +s.count('6') +s.count('7') +s.count('8') +s.count('9')) == 0)\
or (s.count('3') == 1 and (s.count('0') + s.count('2') + s.count('1') +s.count('4') +s.count('5') +s.count('6') +s.count('7') +s.count('8') +s.count('9')) == 0)\
or (s.count('4') == 1 and (s.count('0') + s.count('2') + s.count('3') +s.count('1') +s.count('5') +s.count('6') +s.count('7') +s.count('8') +s.count('9')) == 0)\
or (s.count('5') == 1 and (s.count('0') + s.count('2') + s.count('3') +s.count('4') +s.count('1') +s.count('6') +s.count('7') +s.count('8') +s.count('9')) == 0)\
or (s.count('6') == 1 and (s.count('0') + s.count('2') + s.count('3') +s.count('4') +s.count('5') +s.count('1') +s.count('7') +s.count('8') +s.count('9')) == 0)\
or (s.count('7') == 1 and (s.count('0') + s.count('2') + s.count('3') +s.count('4') +s.count('5') +s.count('6') +s.count('1') +s.count('8') +s.count('9')) == 0)\
or (s.count('8') == 1 and (s.count('0') + s.count('2') + s.count('3') +s.count('4') +s.count('5') +s.count('6') +s.count('7') +s.count('1') +s.count('9')) == 0)\
or (s.count('9') == 1 and (s.count('0') + s.count('2') + s.count('3') +s.count('4') +s.count('5') +s.count('6') +s.count('7') +s.count('8') +s.count('1')) == 0)):
k += 1
print(k)
如果你需要生成所有可能的数字并选择你需要的数字,那么迭代字符串的字符就足够了,增加数字 0..9 上的计数器(我做了一个原始检查,检查会更快
if c < 'a'
要么是集合中的一个条目)。以零开头的行将被丢弃(它们不是五位十六进制数字)以下是如何以更智能的方式获得结果的方法:
逻辑是这样的 - 如果数字在前,则可以采用 9 个值,否则可以采用 10 个值。其余 4 个位置由字母占据,每个位置有 6 个选项。