在python中生成一个字符串列表

jhe*_*ngs 2 python combinations

我是python的新手,所以我想我会试试这个快速的脚本......

给定一组输入词:即"dead","beef",如何以编程方式生成给定长度和填充字符的所有可能字符串?

结果看起来像这样(使用0长度为12 的垫):

deadbeef0000
dead0beef000
dead00beef00
dead000beef0
dead0000beef
0deadbeef000
0dead0beef00
0dead00beef0
0dead000beef
00deadbeef00
00dead0beef0
00dead00beef
000deadbeef0
000dead0beef
0000deadbeef
Run Code Online (Sandbox Code Playgroud)

生成此列表的天真方法可能是:

for x in range(0, 5):
  pre = '0' * x
  for y in range(0, 5):
    mid = '0' * y
    for z in range (0, 5):
      post = '0' * z
      val = pre + 'dead' + mid + 'beef' + post
      if len(val) == 12:
        print val
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?我已经研究itertools过组合,但无法让它产生所需的结果.

Guy*_*ely 6

也许是这样的:

>>> from itertools import permutations
>>> lst = ['dead', 'beef', '0', '0', '0', '0']
>>> for i in set(permutations(lst)):
...     ''.join(i)
... 
'beefdead0000'
'dead0beef000'
'dead000beef0'
'00dead0beef0'
'0beef000dead'
...
Run Code Online (Sandbox Code Playgroud)

编辑:关注@TimPeters评论

>>> [''.join(i) for i in set(permutations(lst)) 
                                        if i.index('dead') < i.index('beef')]
Run Code Online (Sandbox Code Playgroud)

或者以更一般的方式:

>>> real_words = ['dead', 'beef']
>>> padding = 4
>>> [''.join(i) for i in set(permutations(real_words + ['0'] * padding)) 
                      if reduce(lambda x,y: i.index(x) < i.index(y), real_words)]
Run Code Online (Sandbox Code Playgroud)

  • 嗯.在OP的例子中,"死"总是出现在"牛肉"之前.那不是OP想要的吗? (2认同)