我正在尝试从文件中搜索单词并将每行中生成的单词附加到元组。然后我想从两个元组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时,应获得它们中常见的单词。 请注意该文件不是英文文件。它是一种不同的语言。
答案 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([[],[]])=失败,因为列表无法散列