3

私はPythonを初めて使用し、障害にぶつかりました。各行に 1 つのリストを含む python リストがあります。基本的には、リスト間で値を共有するリストを結合したいと考えています。たとえば、以下は、現時点での python リストの外観と、追加のコマンドが実行された後のデータの外観です。

この種の問題がセットと交差に理想的であることは知っていますが、それらを正しく機能させることができませんでした。インデックスを使用した投稿も見ましたが、それもうまくいきませんでした。

リストは次のようになります。

[
    ['mary', 'home'],
    ['mary', 'school'],
    ['mary', 'work'],
    ['bob', 'home'],
    ['bob', 'school'],
    ['bob', 'work'],
    ['tom', 'work'],
    ['tom', 'school'],
    ['tom', 'home'],
    ['bill', 'vacation'],
]

私はそれをどのように見せたいですか:

[
    ['mary', 'bob', 'tom', 'home', 'school', 'work'],
    ['bill', 'vacation'],
]
4

1 に答える 1

3

サンプルデータは、入力データでは順序が重要であることを示唆しており、状況が複雑になります。実際には単なる例であり、順序は重要ではないと仮定すると、セットは実際に問題を解決するための理想的な方法です。

data = [
    ['mary', 'home'],
    ['mary', 'school'],
    ['mary', 'work'],
    ['bob', 'home'],
    ['bob', 'school'],
    ['bob', 'work'],
    ['tom', 'work'],
    ['tom', 'school'],
    ['tom', 'home'],
    ['bill', 'vacation'],
]

combined = []

for subset in [set(d) for d in data]:
    for candidate in combined:
        if not candidate.isdisjoint(subset):
            candidate.update(subset)
            break
    else:
        combined.append(subset)

これは Python のfor-else構文を使用しますが、これは誰もが慣れているわけではありません。combinedにはセットのリストが含まれるため、ユースケースによってはそれらをリストに変換したい場合があります。

于 2013-04-26T13:27:49.383 に答える