首页 > 解决方案 > 如何检查一个单词是否属于一个或另一个数组?

问题描述

我正在尝试逐字阅读文本文件,然后将该单词与一组分类数组(快乐、悲伤、愤怒等)进行比较,如果它在该数组中,则添加该数组的标识符(唯一分配给他们的号码)到一个空列表。

这就是我所拥有的:

anger = ['abandoned', 'abandonment', 'abhor', 'abhorrent', 'abolish',....]
joy = ['absolution', 'abundance', .....]
sadness = ['abandoned', ....]
trust = ['example word']

# Python program to read  
# file word by word 
DNA = []
# opening the text file 
with open('ch1.txt','r', encoding="utf8") as file: 
   
    # reading each line     
    for line in file: 
   
        # reading each word         
        for word in line.split(): 
             if word in joy:
               DNA.append('6');
    
    # reading each line     
    for line in file: 
   
        # reading each word         
        for word in line.split():            
             if word in anger:
                DNA.append('2');
                
     # reading each line     
    for line in file: 
   
        # reading each word         
        for word in line.split():      
             if word in fear:
                DNA.append('5');
           
      # reading each line     
    for line in file: 
   
        # reading each word         
        for word in line.split():        
             if word in sadness:
                DNA.append('7');
     
        
     # reading each line     
    for line in file: 
   
        # reading each word         
         for word in line.split():      
             if word in trust:
                DNA.append('9');
               
       # reading each line     
    for line in file: 
   
        # reading each word         
        for word in line.split(): 
             if word in surprise:
               DNA.append('8');
             
       # reading each line     
    for line in file: 
   
        # reading each word         
        for word in line.split():       
             if word in disgust:
               DNA.append('4');

 
print("Emotional DNA: " ,DNA)

我想要代码做的是这样的:

if word is in anger:
   add anger to the list;

or if word is in sadness:
   add sadness to the list;

该词也可以出现在多个类别中,在这种情况下,两个类别标识符都应该附加到列表中。

这是我期望的输出:

2, 2, 2, 4, 6, 4, 2, 3, 3, 4,8, 4, 5

总之,我想要的是匹配正在读入的单词以查看它是否属于一个(或多个)类别,然后将该类别的标识符添加到空列表中。这是在文本文件中一一映射这些情绪类别的进展。

当前代码发生的事情是它只是阅读第一个 if 语句并给我这个:

6, 6, 6, 6, 6, 6, 6

当我尝试用 elif 替换第一个语句之后的 if 语句时,只读取了前两个语句而忽略了其他语句。我不知道如何使这个 if-else-if 梯子工作,任何帮助将不胜感激。

标签: pythonarrayssortingif-statement

解决方案


你应该只通读一遍台词和单词。然后针对该循环内的每个列表测试单词。

for line in file:
    for word in line.split():
        if word in joy:
            DNA.append('6')
        if word in anger:
            DNA.append('2')
        if word in fear:
            DNA.append('5')
        # and so on

你只得到一组数字,因为在你读完文件之后,下一个for line in file循环就没有什么要读的了。你可以先倒带file.seek(0),然后你会得到所有的6,然后是所有的2,等等。你不会知道它们在文件中实际发生的顺序。

顺便说一句,如果单词列表很大,您应该使用集合而不是列表。


推荐阅读