# Python 获取多个list数组的交集的方法

`[[1,3,5,7], [1,1,3,5,7], [1,4,7,9]] `

`[1,7]`

## 1、使用itertools实现

```from itertools import cycle
def intersection(data):
ITERATOR, VALUE = 0, 1
n = len(data)
result = []
try:
pairs = cycle([(it := iter(sublist)), next(it)] for sublist in data)
pair = next(pairs)
curr = pair[VALUE]  # Candidate is the largest value seen so far
matches = 1         # Number of pairs where the candidate occurs
while True:
iterator, value = pair = next(pairs)
while value < curr:
value = next(iterator)
pair[VALUE] = value
if value > curr:
curr, matches = value, 1
continue
matches += 1
if matches != n:
continue
result.append(curr)
while (value := next(iterator)) == curr:
pass
pair[VALUE] = value
curr, matches = value, 1
except StopIteration:
return result```

```def intersection(data):
ITERATOR, VALUE = 0, 1
n = len(data)
result = []
try:
pairs = cycle([(it := iter(sublist)), next(it)] for sublist in data)
pair = next(pairs)
curr = pair[VALUE]  # Candidate is the largest value seen so far
matches = 1         # Number of pairs where the candidate occurs
while True:
iterator, value = pair = next(pairs)
while value < curr:
value = next(iterator)
pair[VALUE] = value
if value > curr:
curr, matches = value, 1
continue
matches += 1
if matches != n:
continue
result.append(curr)
for i in range(n):
iterator, value = pair = next(pairs)
pair[VALUE] = next(iterator)
curr, matches = pair[VALUE], 1
except StopIteration:
return result```

`data = [[1,3,5,7],[1,1,3,5,7],[1,4,7,9]]print(intersection(data))[1, 7]`

## 2、使用reduce实现

```from functools import reduce
a = [[1,3,5,7],[1,1,3,5,7],[1,4,7,9]]
print(reduce(lambda x, y: x & set(y), a[1:], set(a[0])))```

## 3、使用set实现

```d = [[1,3,5,7],[1,1,3,5,7],[1,4,7,9]]
result = set(d[0]).intersection(*d[1:])
print(result)```