在Python中匹配两个集合(/list)

2024-09-27 04:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两套,如下所示

设置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中的元素并不总是用“和”隔开,它可以是其他任何东西,也可以只是一个空格。你知道吗


Tags: csvin脚本编辑forwithopenreader
2条回答

您可以重新排列列表,即当列表项包含"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'])

这有用吗?你知道吗

如果可以是分隔单词的任何字符串(包括空格),则可以执行以下操作:

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

;将列表中的两个单词分隔开时,它将不起作用。。。但我认为当你有一个非大写的单词分隔符时,它可以处理所有的情况。你知道吗

相关问题 更多 >

    热门问题