我有两套如下所示
设置A:
(['African American and Japanese', 'Indian', 'Chinese'])
设置B:
(['African', 'American', 'African American', 'Chinese', 'Russian'])
我希望输出为(['African American', 'Chinese'])
但是我的脚本只给我中文或非洲,美国,中文(分裂非洲和美国,我知道我的脚本是如何,但我不知道如何编辑) 。
到目前为止我试过这个。
import csv
alist, blist = [], []
with open("sample.csv", "rb") as fileA:
reader = csv.reader(fileA, delimiter=',')
for row in reader:
for row_str in row:
alist.append(row_str)
#alist = alist.strip().split() #If I use this, it also prints African, but doesn't print African American.
with open("ethnicity.csv", "rb") as fileB:
reader = csv.reader(fileB, delimiter='\n')
for row in reader:
blist += row
blist = [x.lower() for x in blist]
first_set = set(alist)
second_set = set(blist)
print [s for s in first_set if second_set in s]
编辑:
SetA中的元素并不总是用“和”分隔,它可以是其他任何东西,也可以只是一个空格。
答案 0 :(得分:0)
您可以重新排列列表,即在列表项包含"and"
作为子字符串时将其拆分
然后使用set的intersection
方法从两个列表中获取常用项。
代码:
def convert(input):
output = []
for i in input:
for j in i.split("and"):
output.append(j.strip())
return output
a = ['African American and Japanese', 'Indian', 'Chinese']
b = ['African American', 'Chinese']
a = convert(a)
print a
b = convert(b)
print set(a).intersection(set(b))
输出:
set(['African American', 'Chinese'])
这有用吗?
答案 1 :(得分:0)
如果它可以任何字符串(包括空格)分隔单词,你可以这样做:
import re
sep = ' ; '
_a = sep.join(re.split(' [a-z]* ', sep.join(a)))
_b = sep.join(re.split(' [a-z]* ', sep.join(b)))
set(_b.split(sep)).intersection(_a.split(sep))
当;
将您的列表中的两个单词分开时,它无法正常工作...但我认为它确实可以处理所有情况,当您拥有非负载式字词分隔符时。