此代码的目标是用户将输入一个包含三个"通配符"的字符串。任何顺序的符号。我在我的程序中指定了一个含义(?是任何字母或数字,#是任何数字,&是任何字母)。然后我想要一个相应字母和/或数字的每个组合的列表,但它必须保持与原始通配符相同的顺序。最后,我会将所有这些新组合替换回原始字符串。
data.table
我觉得这应该有用,但必须有一个更有效的方法来做到这一点。我也遇到了这个错误。 TypeError:' itertools.product'对象不支持删除项目,因此我无法删除不正确的列表项。那是因为它是一个元组,我无法修改元组元素吗?
答案 0 :(得分:1)
您可以使用itertools.product
:
import itertools
import string
user_string = '???'
iterables = []
for c in user_string:
if c == '?':
iterables.append(string.ascii_lowercase + string.digits)
elif c == '&':
iterables.append(string.ascii_lowercase)
elif c == '#':
iterables.append(string.digits)
for item in itertools.product(*iterables):
print(''.join(item))
如果user_string
包含通配符以外的字符,您也可以执行此操作:
import itertools
import string
user_string = 'aaa???'
iterables = []
for c in user_string:
if c == '?':
iterables.append(string.ascii_lowercase + string.digits)
elif c == '&':
iterables.append(string.ascii_lowercase)
elif c == '#':
iterables.append(string.digits)
else:
iterables.append([c])
for item in itertools.product(*iterables):
print(''.join(item))