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
过组合,但无法让它产生所需的结果.
也许是这样的:
>>> 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)
归档时间: |
|
查看次数: |
358 次 |
最近记录: |