8

2つのリストの共通部分を次のように定義します。

def intersect(a, b):
  return list(set(a) & set(b))

3つの引数の場合、次のようになります。

def intersect(a, b, c):
  return (list(set(a) & set(b) & set(c))

この関数を可変数のリストに一般化できますか?

呼び出しは、たとえば次のようになります。

>> intersect([1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2])
[2]

編集:Pythonはこの方法でしかそれを達成できませんか?

intersect([
          [1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2]
         ])
[2]
4

2 に答える 2

17

*-list-to-argument 演算子を使用し、カスタム関数の代わりに次を使用しますset.intersection

>>> lists = [[1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2]]
>>> list(set.intersection(*map(set, lists)))
[2]

関数内で list-to-set-to-list ロジックが必要な場合は、次のように実行できます。

def intersect(lists):
    return list(set.intersection(*map(set, lists)))

intersect()単一の引数ではなく任意の数の引数を受け入れたい場合は、代わりにこれを使用します。

def intersect(*lists):
    return list(set.intersection(*map(set, lists)))
于 2012-06-02T09:37:55.913 に答える
0
def intersect(*lists):
    if(len(lists) <=1):
        return lists[0]

    result = lists[0]
    for i in range(1, len(lists)):
        result = set(result) & set(lists[i])

    return list(result)

このように関数を呼び出します...

intersect([1,2],[2,3],[2,4])

衛生管理はすべてお任せください。

于 2012-06-02T09:50:11.090 に答える