替换列表中的成员以产生所有可能的排列

2024-09-25 02:38:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在列表中

['x', 'x', 'x..', 'x']

我希望在所有可能的排列中用.-替换列表中的每个x(通过将列表读入字符串)。因此,输出可以是

['. . ... .'],
['- - -.. -'],
['. - -.. .'] 

以及所有类似的排列。我试过下面的脚本,但我只能得到两个模式作为输出。你知道吗

def fun(inputStringList):
    message_received = inputStringList
    message_received = ' '.join(inputStringList)
    for i in range(len(message_received)):
        x = 'x'
        y = '.'
    message = message_received.replace(x, y)
    message1 = message.split(",")
    print message1
    for i in range(len(message_received)):
        x = 'x'
        y = '-'
    message = message_received.replace(x, y)
    message2 = message.split(",")
    print message2

def funTest():
    test = ['x', 'x', 'x..', 'x']
    print fun(test)
funTest()

输出:

['. . ... .']
['- - -.. -']

怎么办?你知道吗


Tags: inmessage列表forlendefrangereplace
1条回答
网友
1楼 · 发布于 2024-09-25 02:38:27

您希望(字符数.-的乘积重复,所以product('.-', number=number_of_x_characters)。你知道吗

我会使用str.format()来简化对生成的.-组合的插值:

from itertools import product

def fun(inputStringList):
    count = sum(s.count('x') for s in inputStringList)
    template = ' '.join(inputStringList).replace('x', '{}')
    for replacements in product('.-', repeat=count):
        yield template.format(*replacements)

这是一个发电机,在它上面循环:

>>> test = ['x', 'x', 'x..', 'x']
>>> for result in fun(test):
...     print(result)
...
. . ... .
. . ... -
. . -.. .
. . -.. -
. - ... .
. - ... -
. - -.. .
. - -.. -
- . ... .
- . ... -
- . -.. .
- . -.. -
- - ... .
- - ... -
- - -.. .
- - -.. -

相关问题 更多 >