如何相交很多集合
How to intersect a lot of sets
我有套
{1, 2, 3, 4}
{2, 3, 4, 5}
{3, 4, 5, 6}
{4, 5, 6, 7}
{5, 6, 7, 8}
我需要从第一个开始相交集。我的意思是我应该相交
{1, 2, 3, 4}
{2, 3, 4, 5}
{3, 4, 5, 6}
下一个
{2, 3, 4, 5}
{3, 4, 5, 6}
{4, 5, 6, 7}
和
{3, 4, 5, 6}
{4, 5, 6, 7}
{5, 6, 7, 8}
我怎样才能在循环中做到这一点?我知道我可以使用 set1 & set2 & set3
,但我不知道如何使用下一个 set2 & set3 & set4
等?
如果您正在寻找进行多组交集的方法,那么 this page has the answer, which basically tells you to use set.intersection()
函数
如果您不知道如何将您的集合放入列表中然后遍历它,这是一个不同的问题,这是基本的 Python。
在Python中,您可以将对象(包括集合)放入列表中并按如下方式遍历它:
# Build the list of sets
set_list = []
for i in range(1, 6):
set_list.append(set([i, i+1, i+2, i+3]))
# Now set_list contains the set (1,2,3,4), (2,3,4,5), ..., (5,6,7,8)
# Traverse and do set intersection
for i in range(len(set_list)-2):
intersection = set.intersection(set_list[i], set_list[i+1], set_list[i+2])
print(intersection)
# Will print:
# set([3, 4])
# set([4, 5])
# set([5, 6])
首先,您需要将所有集合放在一个列表中,然后使用 zip
-函数并行遍历您的列表:
sets = [
{1, 2, 3, 4},
{2, 3, 4, 5},
{3, 4, 5, 6},
{4, 5, 6, 7},
{5, 6, 7, 8},
]
for s1, s2, s3 in zip(sets, sets[1:], sets[2:]):
print(s1 & s2 & s3)
或更一般:
AMOUNT_OF_SETS_TO_INTERSECT = 3
for sets_to_intersect in zip(*(sets[i:] for i in range(AMOUNT_OF_SETS_TO_INTERSECT))):
print(set.intersection(*sets_to_intersect))
我有套
{1, 2, 3, 4}
{2, 3, 4, 5}
{3, 4, 5, 6}
{4, 5, 6, 7}
{5, 6, 7, 8}
我需要从第一个开始相交集。我的意思是我应该相交
{1, 2, 3, 4}
{2, 3, 4, 5}
{3, 4, 5, 6}
下一个
{2, 3, 4, 5}
{3, 4, 5, 6}
{4, 5, 6, 7}
和
{3, 4, 5, 6}
{4, 5, 6, 7}
{5, 6, 7, 8}
我怎样才能在循环中做到这一点?我知道我可以使用 set1 & set2 & set3
,但我不知道如何使用下一个 set2 & set3 & set4
等?
如果您正在寻找进行多组交集的方法,那么 this page has the answer, which basically tells you to use set.intersection()
函数
如果您不知道如何将您的集合放入列表中然后遍历它,这是一个不同的问题,这是基本的 Python。
在Python中,您可以将对象(包括集合)放入列表中并按如下方式遍历它:
# Build the list of sets
set_list = []
for i in range(1, 6):
set_list.append(set([i, i+1, i+2, i+3]))
# Now set_list contains the set (1,2,3,4), (2,3,4,5), ..., (5,6,7,8)
# Traverse and do set intersection
for i in range(len(set_list)-2):
intersection = set.intersection(set_list[i], set_list[i+1], set_list[i+2])
print(intersection)
# Will print:
# set([3, 4])
# set([4, 5])
# set([5, 6])
首先,您需要将所有集合放在一个列表中,然后使用 zip
-函数并行遍历您的列表:
sets = [
{1, 2, 3, 4},
{2, 3, 4, 5},
{3, 4, 5, 6},
{4, 5, 6, 7},
{5, 6, 7, 8},
]
for s1, s2, s3 in zip(sets, sets[1:], sets[2:]):
print(s1 & s2 & s3)
或更一般:
AMOUNT_OF_SETS_TO_INTERSECT = 3
for sets_to_intersect in zip(*(sets[i:] for i in range(AMOUNT_OF_SETS_TO_INTERSECT))):
print(set.intersection(*sets_to_intersect))