有什么更有效的方法呢?

时间:2016-04-03 22:42:20

标签: python

此代码的目标是用户将输入一个包含三个"通配符"的字符串。任何顺序的符号。我在我的程序中指定了一个含义(?是任何字母或数字,#是任何数字,&是任何字母)。然后我想要一个相应字母和/或数字的每个组合的列表,但它必须保持与原始通配符相同的顺序。最后,我会将所有这些新组合替换回原始字符串。

data.table

我觉得这应该有用,但必须有一个更有效的方法来做到这一点。我也遇到了这个错误。 TypeError:' itertools.product'对象不支持删除项目,因此我无法删除不正确的列表项。那是因为它是一个元组,我无法修改元组元素吗?

1 个答案:

答案 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))