我如何从特定 letter/digit 启动 itertools 组合?
How can i start itertools combinations from specific letter/digit?
我有这样的代码:
start = 1
end = 2
for length in range(start, end+1):
for c in itertools.combinations_with_replacement(string.ascii_letters + string.digits, length):
这将打印从 A 到 Z 的每个 uppercase/lowercase 个字母,在所有字母完成后,它将开始打印从 0 到 9 的所有数字。所以它看起来像这样:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
第一个循环完成后,进入第二个循环并做同样的事情。
像这样:
第一个周期开始:a
第二个循环开始:aa
等等
我想要它做什么:
我想从特定的字母或数字开始组合。
像这样:
组合1:
第一个周期开始:b
第二个周期开始:ba
如果不行就这样:
组合二:
第一个周期开始:b
第二个周期开始:bb
我认为你在某个索引之后要求所有可能的排列,在这种情况下你可以这样做:
import string
import itertools
chars = string.ascii_letters + string.digits
def alpha_perms(index):
return list(itertools.permutations(chars[index:]))
print(alpha_perms(0)) #0th index to go along with the below statement
尽管...这很可能(绝对)会冻结您的机器。 chars
中有 62 个字符,即 62!
(62 阶乘),约等于 3.1469973e+85 或~π*10^85th 假定您传入第 0 个索引的可能组合的幂。即使是一个合理的索引也需要很长时间。
或者,因为使用 return list(...)
会导致高组合可能性的问题。您可以 yield
值
import string
import itertools
chars = string.ascii_letters + string.digits
def alpha_perms(index):
for perm in itertools.permutations(chars[index:]):
yield perm
我有这样的代码:
start = 1
end = 2
for length in range(start, end+1):
for c in itertools.combinations_with_replacement(string.ascii_letters + string.digits, length):
这将打印从 A 到 Z 的每个 uppercase/lowercase 个字母,在所有字母完成后,它将开始打印从 0 到 9 的所有数字。所以它看起来像这样:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
第一个循环完成后,进入第二个循环并做同样的事情。 像这样:
第一个周期开始:a
第二个循环开始:aa
等等
我想要它做什么:
我想从特定的字母或数字开始组合。
像这样:
组合1:
第一个周期开始:b
第二个周期开始:ba
如果不行就这样:
组合二:
第一个周期开始:b
第二个周期开始:bb
我认为你在某个索引之后要求所有可能的排列,在这种情况下你可以这样做:
import string
import itertools
chars = string.ascii_letters + string.digits
def alpha_perms(index):
return list(itertools.permutations(chars[index:]))
print(alpha_perms(0)) #0th index to go along with the below statement
尽管...这很可能(绝对)会冻结您的机器。 chars
中有 62 个字符,即 62!
(62 阶乘),约等于 3.1469973e+85 或~π*10^85th 假定您传入第 0 个索引的可能组合的幂。即使是一个合理的索引也需要很长时间。
或者,因为使用 return list(...)
会导致高组合可能性的问题。您可以 yield
值
import string
import itertools
chars = string.ascii_letters + string.digits
def alpha_perms(index):
for perm in itertools.permutations(chars[index:]):
yield perm