首页 > 解决方案 > 通过比较python中的现有列表并导出到excel来创建列表

问题描述

我正在处理 python 脚本,尝试通过以下方式创建带有列的 excel 文件:

只有一个

仅限 b

仅限 c

a 和 b 但不在 c 中

b 和 c 但不在 a

c 和 a 但不在 b 中

a 和 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)    

标签: pythonexcellistfor-loopvenn-diagram

解决方案


你想要的是sets,而不是列表。他们很好地支持这类操作。要创建集合,要么调用set(xs)list 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)您还可以通过调用或类似方式转换回列表。使用这些工具,您可以轻松构建所需的维恩图。请注意,所有这些函数都返回集合,从不修改原始集合。


推荐阅读