Python 2.7。需要帮助来计算列表中的混合单词(第一个python项目)

时间:2017-03-03 14:42:56

标签: python python-2.7 itertools

我正在开发我的第一个python项目。它(又一个)密码字典生成器基于输入关于目标的相同密码信息(在这种情况下是社交工程本身!)。

我已经基于菜单部分工作正常,它使用户能够添加他们选择的单词并选择输出文件名,添加数字和添加特殊字符的选项。

我需要做的是: -

1)将单词输入到列表中(例如,kidsname,birthmonth,starsign)成功完成此位。它在[listA]

2)将每个单词的首字母大写(例如,kidsname - > Kidsname)成功完成此位。然后将其保存在[listB]中。

3)取[listA]和[listB]中的单词并将它们混合到所有可能的组合中(例如,kidsname,kidsnamebirthmonth,Starsignkidsname,BirthmonthstarsignKidsname等等......这是我目前难以理解的部分我已经尝试过itertools.permutations而没有任何快乐。

最终..... 4)在开头和结尾添加数字序列(例如123kidsnameBirthmonth,starsignKidsname666等...)

5)添加特殊字符(例如Starsignbirthmonth123 - > St @ rsignbirthm0nth123)

任何想法。帮助赞赏。我现在只想要第3步的建议。当我到达他们时,我将跨越第4步和第5步! 谢谢 G.R。

1 个答案:

答案 0 :(得分:1)

对于第3步:如何:

def eachCombination(listA, listB):
  for a in listA:
    for b in listB:
      yield a + b
      yield b + a

for combination in eachCombination(
    ['one', 'two', 'three'],
    ['blue', 'green', 'red']):
  print combination

这应打印此列表:

oneblue
blueone
onegreen
greenone
onered
redone
twoblue
bluetwo
twogreen
greentwo
twored
redtwo
threeblue
bluethree
threegreen
greenthree
threered
redthree

更通用的方法可以像这样使用itertools

for product in itertools.product(
    ['one', 'two', 'three'],
    ['blue', 'green', 'red'],
    ['cancer', 'leo', 'virgo']):
  for combination in itertools.permutations(product):
    print ''.join(combination)

试试这个; - )

如果你想将它与每个元素的不同大小写结合起来,试试这个:

for product in itertools.product(
    ['one', 'two', 'three'],
    ['blue', 'green', 'red'],
    ['cancer', 'leo', 'virgo']):
  for combination in itertools.permutations(product):
    originalAndCapitalized = [ (original, original.capitalize())
        for original in combination ]
    for words in itertools.product(*originalAndCapitalized):
      print ''.join(words)

我想强调的一点是你应该创建列表。在这样的上下文中使用列表将立即填满你的记忆。使用少量变体创建的组合数量可能会变得很大。您只需要生成它们并迭代它们。

请确保您了解此上下文中的yield关键字。