2

次のようなネストされたリストがあります。

[['a', 'b'], ['c', 'd'], ['q', 'r'], ['z', 'a'], ['r', 's'], ['b', 'c']]

6x2配列の場合、どちらの列にも要素が繰り返されることはありません。

各サブリストの最初(最後)の要素を別のサブリストの最後(最初)の最後の要素と一致させることにより、可能な限りサブリストを結合したいので、次のような結果になります

[['z', 'a', 'b', 'c', 'd'], ['q', 'r', 's']]

この例では、要素を表すために文字を使用していますが、実際の問題では、実際には順序関係はありません。例:言えない'a' < 'b'

醜いwhileループでこれを行うことができますが、Pythonicの方法でそれを行うことを望んでいました.

4

2 に答える 2

3

svk のわずかに高速でクリーンなバージョン。

def nested_linked(link_pairs):
    mapping = dict(link_pairs)
    linkss = []

    # Python2: for link in mapping.viewkeys() - mapping.viewvalues():
    for link in mapping.keys() - mapping.values():
        links = [link]

        while link in mapping:
            link = mapping[link]
            links.append(link)

        linkss.append(links)

    return linkss
于 2013-09-20T14:46:19.310 に答える