Как выполнить определенные c наборы операций пересечения? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть список наборов в python как A=[{1, 'CL1'},{1, 'CL2'},{2, 'CL3'},{2, 'CL9'}]. Здесь значения int представляют номер студента, а строковое значение представляет категорию класса. Я хочу выполнить операцию пересечения таким образом, чтобы класс X и класс Y разделяли следующих учеников. Например, CL1, CL2 имеют общего студента 1. Точно так же CL3, CL9 имеют студента 2 общего. Как это сделать?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020
A=[{1, 'CL1'},{1, 'CL3'},{2, 'CL3'},{2, 'CL9'}]
l = [tuple(row) for row in A]

dic = {}
for row in l:
    if row[0] in dic:
        dic[row[0]].append(row[1])
    else:
        dic[row[0]] = [row[1]]

for key in dic:
    if len(dic[key]) > 1:
        print(key, ':', dic[key])

Вы можете создать словарь, в котором ключом является студент, а значением является список, содержащий все классы, в которых содержится студент. Затем вы можете распечатать все клавиши di c и значения, для которых длина списка больше 1.

0 голосов
/ 27 марта 2020

Использовать пересечение между наборами.

A[0].intersection(A[1])
A[2].intersection(A[3])
...