Создание списков путем сравнения существующих списков в Python и экспорта в Excel - PullRequest
0 голосов
/ 29 июня 2018

Я работаю над сценарием Python, пытаясь создать файл Excel со столбцами следующим образом:

только

b только

только c

а и б, но не в с

b и c, но не в

с и а, но не в б

а и б и в.

Вывод будет выглядеть как диаграмма Венна из 3 групп, но мне нужно в списках, а затем я смогу экспортировать в таблицу Excel.

list1 = ['ab','cd','gfa','eha','tu','asb','acd','cgf','ceh','dtu','ased','ra','re','sdgfsycbjs','jcjhcbsd']
list2 = ['abx','cd','gfr','eha','tu','asb','acl','cgfta','cpah','adtu','assa','fd','as','sbddsvc','jbcbh']
list3 = ['abs','cd','gfv','eh','tu','asb','ased','cgf','ceh','adtu','assa','qw','uy','hdsjb','bcjh']
a = []
b = []
c = []
ab = []
bc = []
ca = []
abc = []
for item in list1:
        if item in list2:
            if item in list3:
                if item not in abc:
                    abc.append(item)
            else:
                ab.append(item)
        else:
            if item not in ca:
                a.append(item)

for item in list2:
    if item in list3:
        if item in list1:
            if item not in abc:
                abc.append(item)
        else:
            bc.append(item)
    else:
        if item not in ab:
            b.append(item)        

for item in list3:
    if item in list1:
        if item in list2:
            if item not in abc:
                abc.append(item)
        else:
            ca.append(item)
    else:
        if item not in bc:
            c.append(item)    

1 Ответ

0 голосов
/ 29 июня 2018

То, что вы хотите set с, а не списки Они очень хорошо поддерживают подобные операции. Чтобы создать наборы, либо вызовите set(xs) в списке xs, либо используйте литерал набора, например {'a', 'b', ... } (в отличие от аналогичного литерала списка с использованием квадратных скобок).

С этими наборами вы можете делать такие вещи, как

foo = {'a', 'b'}
bar = {'b', 'c', 'd'}

foo.difference(bar) # returns {'a'}
foo.union(bar) # returns {'a', 'b', 'c', 'd'}
foo.intersection(bar) # returns {'b'}
foo.symmetric_difference(bar) # returns {'a', 'c', 'd'}
...

Вы также можете преобразовать обратно в списки, позвонив по номеру list(foo) или подобному. С помощью этих инструментов вы можете легко построить желаемые диаграммы Венна. Обратите внимание, что все эти функции возвращают новые наборы, никогда не изменяя оригиналы.

...