Python中的列表减法

Python中的列表减法,python,list,set,logic,Python,List,Set,Logic,我有一个逗号分隔的文本文件,内容有点像这样: pickle_4500@dill.chile, pickle_4501@dill.chile, pickle_4502@dill.chile, pickle_4503@dill.chile, pickle_4504@dill.chile, pickle_4505@dill.chile 我们把它叫做emails1.csv。我还有另一个逗号分隔的文本文件: pickle_4503@dill.chile, pickle_4505@dill.chile

我有一个逗号分隔的文本文件,内容有点像这样:

pickle_4500@dill.chile, pickle_4501@dill.chile, pickle_4502@dill.chile, pickle_4503@dill.chile, pickle_4504@dill.chile, pickle_4505@dill.chile
我们把它叫做
emails1.csv
。我还有另一个逗号分隔的文本文件:

pickle_4503@dill.chile, pickle_4505@dill.chile
我们把它叫做
emails2.csv
。我需要使用Python从
emails1.csv
中减去
emails2.csv
。伪代码语:

emails1.csv = emails1.csv - emails2.csv

Total virgin到Python,但我是基于我发现的几个示例来实现的。它能做我认为它能做的吗?也就是说,将
emails2.csv
中的电子邮件从
emails1.csv
中取出,并将差异放入名为
subtractomatic.csv
的文件中

from sets import Set
import csv

fin = open('emails1.csv', 'rb')
reader = csv.reader(fin)
email_list1 = list(reader)[0]

fin = open('emails2.csv', 'rb')
reader = csv.reader(fin)
email_list2 = list(reader)[0]

email_list1 = list(set(email_list1)-set(email_list2))

fout = open('subtractomatic.csv', 'wb')
writer = csv.writer(fout, quoting=csv.QUOTE_NONE)
writer.writerow(email_list1)

fout.close()

fin.close()
fin.close()
我想是的,因为我的原始文件,即
emails1.csv
,里面有
X
电子邮件,当我打开
subtractomatic.csv
时,里面有电子邮件,当我运行

grep @ -o subtractomatic.csv | wc -l
在终端中,我得到了
X/2
,这很有意义,因为
emails1.csv
的电子邮件数量是
emails2.csv
的两倍。然而,我也是一个新手,所以我不知道我是否正确看待这件事。

用于查找两个列表之间的差异,然后将结果分配回列表1。集合模块提供用于构造和操作唯一元素的无序集合的类。常见用途包括成员资格测试、从序列中删除重复项,以及计算集合上的标准数学运算,如交集、并集、差分和对称差分

>>> l1 = ['pickle_4500@dill.chile', 'pickle_4501@dill.chile', 'pickle_4502@dill.chile', 'pickle_4503@dill.chile', 'pickle_4504@dill.chile', 'pickle_4505@dill.chile']
>>> l2 = ['pickle_4503@dill.chile', 'pickle_4505@dill.chile']
>>> set(l1)-set(l2)
{'pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile'}
>>> list(set(l1)-set(l2))
['pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile']
>>> l1 = list(set(l1)-set(l2))
>>> l1
['pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile']
用于查找两个列表之间的差异,然后将结果分配回列表1。集合模块提供用于构造和操作唯一元素的无序集合的类。常见用途包括成员资格测试、从序列中删除重复项,以及计算集合上的标准数学运算,如交集、并集、差分和对称差分

>>> l1 = ['pickle_4500@dill.chile', 'pickle_4501@dill.chile', 'pickle_4502@dill.chile', 'pickle_4503@dill.chile', 'pickle_4504@dill.chile', 'pickle_4505@dill.chile']
>>> l2 = ['pickle_4503@dill.chile', 'pickle_4505@dill.chile']
>>> set(l1)-set(l2)
{'pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile'}
>>> list(set(l1)-set(l2))
['pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile']
>>> l1 = list(set(l1)-set(l2))
>>> l1
['pickle_4500@dill.chile', 'pickle_4502@dill.chile', 'pickle_4504@dill.chile', 'pickle_4501@dill.chile']
可以使用以下集合:

difference = set(listA) - set(listB)
可以使用以下集合:

difference = set(listA) - set(listB)
您可以设置
B
a
set
并从
a
中过滤出它的内容,而不是其他人使用的全集方法:

b_set = set(B)
a_filtered = [a for a in A if a not in b_set]
这样做的好处是保持
A
A的顺序已被过滤(无需删除元素)

与其他人使用的全集方法不同,您可以设置
B
A
并从
A
中过滤出它的内容:

b_set = set(B)
a_filtered = [a for a in A if a not in b_set]

这样做的好处是在
A\u filtered
中保持
A
的顺序(不包含要删除的元素)

您可以执行以下操作:
list\u A=list(set(list\u A)-set(list\u b))
要清楚,上面的“=”是一个重新分配操作符。大家好,欢迎来到StackOverflow!我已经为您的问题添加了正确的代码格式,并删除了一些与您的问题无关的额外文本。请查看我们的常见问题。如果你能明确地说出你期望的结果,你会得到符合你期望的答案。“psuedocodenese”由Pickel_Pilot于2015年2月18日(星期三)20:50:27(太平洋标准时间)创造,如果我愿意的话,可能正在向美国专利商标局申请注册^_^您可以执行以下操作:
list\u a=list(set(list\u a)-set(list\u b))
要清楚,上面的“=”是一个重新分配运算符。您好,欢迎使用StackOverflow!我已经为您的问题添加了正确的代码格式,并删除了一些与您的问题无关的额外文本。请查看我们的常见问题。如果你能明确地说出你期望的结果,你会得到与你期望相符的答案。“psuedocodenese”由Pickel_Pilot于2015年2月18日(星期三)20:50:27(太平洋标准时间)创造,如果我愿意,可能正在向美国专利商标局申请注册。^ ^。。。如果您希望以后列表保持有序,您可以使用
排序
。如果您希望以后列表保持有序,您可以使用
排序
。您的意思是说
如果a不在b_集中
?此外,为什么要将
B
更改为集合呢?您可以使用
B
,这是一个列表,因为它是正确的吗?您的意思是说如果a不在B_集合中,就说
?此外,为什么要将
B
更改为集合呢?你可以使用
B
,这是一个列表,因为它是对的?我会对你说实话,阿维纳什·拉吉,我检查了你的,因为我喜欢你的头像^_^事实上,我收回这一点,我检查了你的头像,因为我喜欢你的头像小的时候。我以为它是一只绿色的武士独眼巨人,有三颗向上的牙齿,但当我点击它时,它更大了,它就没那么有趣了。不知道我为什么要告诉你。我要对你说实话,阿维纳什·拉吉,我检查了你的头像,因为我喜欢你的头像^_^事实上,我收回这一点,我检查了你的头像,因为我喜欢你的头像小的时候。我以为它是一只绿色的武士独眼巨人,有三颗向上的牙齿,但当我点击它时,它更大了,它就没那么有趣了。不知道我为什么要告诉你这些。