0

Pythonが、さまざまなリストで共通の要素を見つけるための便利な関数を提供しているかどうか疑問に思っていますか?

2つのリストがあるとしましょう。

[1,2,[3,4]] and [1,3,[3,4]]

関数の理想的な出力は、共通の要素を含むリストである[1、[3,4]]である必要があります。私を悩ませているのは、ネストされたリスト[3,4]です。それがなければ、私は単にset(list1)&set(list2)を行うことができ、この質問は、この質問がリスト内の非共通要素の検索から少し重複しているように見えるかもしれないことを知っている完全な複製になります。上記の例で同じことを試したところ、次のようなエラーが発生しました。

TypeError: unhashable type: 'list'

それに対処する方法はありますか?前もって感謝します!!

4

4 に答える 4

1
>>> a = [1,2,[3,4]]
>>> b = [1,3,[3,4]]
>>> [x for x in a if x in b]
[1, [3, 4]]
于 2012-07-05T22:43:44.860 に答える
1

次のコマンドと IDLE セッションからの出力は、問題の解決に役立ちます。

>>> A = [1,2,[3,4]]
>>> B = [1,3,[3,4]]
>>> [a for a in A if a in B]
[1, [3, 4]]
于 2012-07-05T22:43:49.073 に答える
1

この特定のケースで、以下を使用して、リストのメンバーをハッシュ可能にすることができreprます。

>>> a = [1,2,[3,4]]
>>> b = [1,3,[3,4]]
>>> a_set = set(repr(x) for x in a)
>>> [x for x in b if repr(x) in a_set]
[1, [3, 4]]
于 2012-07-05T22:50:17.353 に答える
0

少しごまかして、ヘルパー関数を作成することもできます (Python のバージョンによって異なります)。

import collections

a = [1,2,[3,4]]
b = [1,3,[3,4]]

def helper(item):
    for i in item:
        if not isinstance(i, collections.Hashable):
            yield tuple(i)
        else:
            yield i

print set(helper(a)) & set(helper(b))

しかし、私はMRABの答えが好きです...

于 2012-07-05T22:51:51.410 に答える