我想编写一个带字符串的程序,让我们说“abc”,然后显示:
abc, Abc, ABc, ABC, AbC, aBc, aBC, AbC
经过一段时间的挖掘后,我发现this question解决了我的问题,但如果字符串包含一些特殊的字符,例如@
和.
,它会给我一些重复的内容。输出,我怎么能这样做只有字母字符是上/下?例如,如果输入是@c,则输出应仅为:
A@c
a@C
A@C
a@c
这是我正在使用的代码:
import itertools
string = 'abc12@abc.com'
x = map(''.join, itertools.product(*((c.upper(), c.lower()) for c in string)))
print x
提前致谢!
答案 0 :(得分:2)
@Caius的答案有效,但是预先删除重复的字符更有效,而不是等到你拥有所有结果然后删除那里的重复项。
我的代码差异只是set((c.upper(), c.lower()))
,而不仅仅是(c.upper(), c.lower())
:
import itertools
string = 'abc12@abc.com'
x = map(''.join, itertools.product(*(set((c.upper(), c.lower())) for c in string)))
assert len(list(x)) == 512
答案 1 :(得分:0)
尝试将数组转换为集合:
open failed: administratively prohibited: open failed