如何制作一个 python 脚本,为您提供来自模式的字符串的每次迭代
How to make a python script that gives you every iteration of a string from a pattern
所以我正在尝试制作一个采用模式(例如:c**l)的 python 脚本,它将 return字符串的每次迭代(* = 字母表中的任何字符)...
所以,我们得到类似:caal、cbal、ccal 等等.
我试过使用 itertools 库的产品,但无法使其正常工作。所以 2 小时后我决定求助于 Stack Overflow。
这是我当前的代码。还没有完成因为我觉得卡住了
alphabet = list('abcdefghijklmnopqrstuvwxyz')
wildChar = False
tmp_string = ""
combinations = []
if '*' in pattern:
wildChar = True
tmp_string = pattern.replace('*', '', pattern.count('*')+1)
if wildChar:
tmp = []
for _ in range(pattern.count('*')):
tmp.append(list(product(tmp_string, alphabet)))
for array in tmp:
for instance in array:
combinations.append("".join(instance))
tmp = []
print(combinations)
你可以试试:
from itertools import product
from string import ascii_lowercase
pattern = "c**l"
repeat = pattern.count("*")
pattern = pattern.replace("*", "{}")
for letters in product(ascii_lowercase, repeat=repeat):
print(pattern.format(*letters))
结果:
caal
cabl
cacl
...
czxl
czyl
czzl
使用itertools.product
import itertools
import string
s = 'c**l'
l = [c if c != '*' else string.ascii_lowercase) for c in s]
out = [''.join(c) for c in itertools.product(*l)]
输出:
>>> out
['caal',
'cabl',
'cacl',
'cadl',
'cael',
'cafl',
'cagl',
'cahl',
'cail',
'cajl'
...
所以我正在尝试制作一个采用模式(例如:c**l)的 python 脚本,它将 return字符串的每次迭代(* = 字母表中的任何字符)...
所以,我们得到类似:caal、cbal、ccal 等等. 我试过使用 itertools 库的产品,但无法使其正常工作。所以 2 小时后我决定求助于 Stack Overflow。
这是我当前的代码。还没有完成因为我觉得卡住了
alphabet = list('abcdefghijklmnopqrstuvwxyz')
wildChar = False
tmp_string = ""
combinations = []
if '*' in pattern:
wildChar = True
tmp_string = pattern.replace('*', '', pattern.count('*')+1)
if wildChar:
tmp = []
for _ in range(pattern.count('*')):
tmp.append(list(product(tmp_string, alphabet)))
for array in tmp:
for instance in array:
combinations.append("".join(instance))
tmp = []
print(combinations)
你可以试试:
from itertools import product
from string import ascii_lowercase
pattern = "c**l"
repeat = pattern.count("*")
pattern = pattern.replace("*", "{}")
for letters in product(ascii_lowercase, repeat=repeat):
print(pattern.format(*letters))
结果:
caal
cabl
cacl
...
czxl
czyl
czzl
使用itertools.product
import itertools
import string
s = 'c**l'
l = [c if c != '*' else string.ascii_lowercase) for c in s]
out = [''.join(c) for c in itertools.product(*l)]
输出:
>>> out
['caal',
'cabl',
'cacl',
'cadl',
'cael',
'cafl',
'cagl',
'cahl',
'cail',
'cajl'
...