2个UNICODE元组/列表的Python交集

时间:2015-09-02 12:15:31

标签: python list unicode intersection

我正在尝试从文件中搜索单词并将每行中生成的单词附加到元组。然后我想从两个元组list_1和list_2中找到相交的单词。但我得到错误 -

TypeError:不可用类型:' list'

# -*- coding: utf-8 -*-

导入重新

list_1 = []

list_2 = []

datafile = open(filename)

对于datafile中的line1:

if '1st word to be searched' in line1:
    s = line1
    left, right = re.findall(r'(\S+\s+\S+)\s+1stWordToBeSearched\s+(\S+\s+\S+)', s)[0]
    set1 = {left, right}

    list_1.extend([left,right])
    list_1 = list(list_1)

datafile1 = open(filename)

表示datafile1中的第2行:

if ' 2nd word to be searched' in line2:
    s = line2
    left, right = re.findall(r'(\S+\s+\S+)\s+2ndWordTbeSearched\s+(\S+\s+\S+)', s)[0]
    set2 = {left, right}

    list_2.extend([left,right])
    list_2 = list(list_2)

result = set1.intersection(set2)

打印(结果)

在第一个循环中 - ' findall'搜索单词" number"的句子。 然后在单词" number"的左侧和右侧找到单词。并创建一个列表 -

list_1 = [of,a,of,elements]

in Second for loop- Findall搜索word" modern"。并给出其左右两个词。并创建第二个列表 -

list_2 = [of,all,elements,are]

文件 - 论文可以包含数字元素,包括文学批评,政治宣言,学术论证,日常生活观察,回忆以及所有现代作者的反思元素是用散文写的,但是诗歌中的作品被称为散文。

当获得list_1和list_2时,应获得它们中常见的单词。 请注意该文件不是英文文件。它是一种不同的语言。

2 个答案:

答案 0 :(得分:0)

您可以为每个列表附加一个列表对象:

list_1.append([left,right])

list_2.append([left,right])

这为两个列表提供了[[left, right]],因此您尝试将嵌套的[left, right]列表作为一个元素放入集合中。

通常,如果您想在现有列表中添加多个元素,则可以使用list.extend()

list_1.extend([left, right])

但是,由于您的列表首先是空的,而您想要做的就是创建一个集合交集,您只需一步就可以从这两个元素中生成集合

left, right = re.findall(r'(\S+\s+\S+)\s+1stWordToBeSearched\s+(\S+\s+\S+)', s)[0]
set1 = {left, right}

left, right = re.findall(r'(\S+\s+\S+)\s+2ndWordToBeSearched\s+(\S+\s+\S+)', s)[0]
set2 = {left, right}

result = set1.intersection(set2)

请注意,除了前两个单词之外,你忽略了所有单词!您正在使用[0]在此处获取findall()列表的第一个结果。

如果您想创建所有单词的交集,可以使用集合理解将所有单词提取到集合中:

set1 = {word for matched in re.findall(r'(\S+\s+\S+)\s+1stWordToBeSearched\s+(\S+\s+\S+)', s)
             for word in matched}

set1 = {word for matched in re.findall(r'(\S+\s+\S+)\s+2ndWordToBeSearched\s+(\S+\s+\S+)', s)
             for word in matched}

result = set1.intersection(set2)

答案 1 :(得分:0)

你有列表内的列表。解决它。

result = set(list_1).intersection(list_2)

set([])= Ok set([[],[]])=失败,因为列表无法散列