Как разделить следующие три списка на 7 групп? - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь разделить эти элементы в A и B и C. Я пытался использовать если иное, но это кажется немного жестко запрограммированным.

A = ["a","b","c","d"]
B = ["a","c","g","e"]
C = ["a","b","f","e"]
X = [[]*7]
common = set(A+B+C)
common1 = set(A) & set(B) & set(C)
common2 = set(A) & set(B)
common3 = set(A) & set(C)
common4 = set(C) & set(B)
for e in common:
    if e in common1:
        X[0] += e
    elif e in common2:
        X[1] += e
    elif e in common3:
        X[2] += e
    elif e in common4:
        X[3] += e
    elif e in A:
        X[4] += e
    elif e in B:
        X[5] += e
    else:
        X[6] += e



X[0] should contain elements common in A,B,C
X[1] should contain elements common in A,B.
X[2] should contain elements common in A,C.
X[3] should contain elements common in C,B.
X[4] should contain elements common in A.
X[5] should contain elements common in B.
X[6] should contain elements common in C.

Лучше ли это сделать в словаре?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

не очень хороший код, но делает то, что вы хотите:

from itertools import combinations
from operator import and_
from functools import reduce

A = ["a", "b", "c", "d"]
B = ["a", "c", "g", "e"]
C = ["a", "b", "f", "e"]

lst = (set(A), set(B), set(C))
ret = []
for r in range(3, 0, -1):
    for comb in combinations(lst, r=r):
        ret.append(reduce(and_, comb))
print(ret)

я преобразовал ваши списки в наборы;set_a & set_b (add_(set_a, set_b), соответственно) выбирает элементы из обоих наборов. itertools.combinations, вызываемый с помощью r=3, r=2 и r=1, выбирает комбинации в нужном вам порядке.

1 голос
/ 01 ноября 2019

Я бы использовал наборы и set.intersection для этого:

A = set(["a","b","c","d"])
B = set(["a","c","g","e"])
C = set(["a","b","f","e"])
X = [
    list(A.intersection(B,C)),
    list(A.intersection(B)),
    list(A.intersection(C)),
    list(B.intersection(C)),
    list(A),
    list(B),
    list(C)]

Не так расширяемо, как код @ hiro, но легко увидеть, что он делает, с первого взгляда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...