簡體   English   中英

生成列表列表的所有替換

[英]Generate All Replacements for List of Lists

我正在 Python 中構建一個應用程序,我需要在其中定義以下類型的 function:

generate_replacements(['a', 'b', ['c', ['e', 'f']]], 1)

預期的 output 是輸入列表的所有可能版本,其中僅替換了一個元素

[
[1, 'b', ['c', ['e', 'f']]],
['a', 1, ['c', ['e', 'f']]],
['a', 'b', 1],
['a', 'b', [1, ['e', 'f']]],
['a', 'b', ['c', 1]],
['a', 'b', ['c', [1, 'f']]],
['a', 'b', ['c', ['e', 1]]]
]

我可以看到遞歸是通往 go 的方式,但我真的很難弄清楚如何最好地開始這個。

您可以從列表中生成替換,然后如果您注意到您正在替換列表,也可以遞歸地將該列表傳回 function。 如果您使用生成器,這會變得更簡單:

def generate_replacements(l, rep):
    for i in range(len(l)):
        yield l[0:i] + [rep] + l[i+1: ]
        if isinstance(l[i], list):
            yield from (l[0:i] + [rec] + l[i+1: ] 
                        for rec in generate_replacements(l[i], rep))


list(generate_replacements(['a', 'b', ['c', ['e', 'f']]], 1))

這給:

[[1, 'b', ['c', ['e', 'f']]],
 ['a', 1, ['c', ['e', 'f']]],
 ['a', 'b', 1],
 ['a', 'b', [1, ['e', 'f']]],
 ['a', 'b', ['c', 1]],
 ['a', 'b', ['c', [1, 'f']]],
 ['a', 'b', ['c', ['e', 1]]]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM