defA_pri(raw_data,s,k):defget_singlgeitems():
counts = {}
for items in raw_data:
for item in items:
if item in counts:counts[item] += 1else:counts[item] = 1
counts_filterd = [key for (key,val) in counts.items() if val >= s]
return counts_filterd
defselect(backet,raw_backet):
new_backet = set()
for tuple_items in backet:
for item in raw_backet:
if item notin single_items or item in tuple_items :continue
tmp = tuple_items+(item,)
new_backet.add(tuple(sorted(tmp)))
return new_backet
defTuple(data):
tuple_data = []
for items in data:
tuple_data.append(set([(item,) for item in items]))
return tuple_data
defSet(data):
set_data = set()
for items in data:
for item in items:
set_data.add(tuple(sorted(item)))
return set_data
n = len(raw_data)
data = Tuple(raw_data)
single_items = get_singlgeitems()
for size in range(2,k+1):
for i in range(n):
data[i] = select(data[i],raw_data[i])
for first in range(n):
items_1 = data[first].copy()
for tuples in items_1:
count = 0for items_2 in data:
count += 1if tuples in items_2 else0if count < s:data[first].remove(tuples)
result = Set(data)
print(result)
A_pri([[1,2,3,4],[1,2],[2,3,4],[1,2,4],[2,3],[3,4]],2,3)