如何将一个列表中的单词与列表中的另一个单词进行比较

时间:2018-10-07 06:25:39

标签: python python-3.x

我在这里有此列表:

列表1

 ['mississippi', 'well', 'worth', 'reading', 'not', 'commonplace', 'river', 'contrary', 'ways', 'remarkable', 'considering', 'missouri', 'main', 'branch', 'longest', 'river', 'world--four', 'miles', 'seems', 'safe', 'say', 'also', 'crookedest', 'river', 'since', 'in', 'one', 'part', 'journey', 'uses', 'one', 'three', 'miles', 'cover', 'same', 'ground', 'crow', 'fly', 'in', 'six', 'seventy-five', 'it', 'discharges', 'three', 'water', 'st', 'lawrence', 'twenty-five', 'as', 'as', 'rhine', 'three', 'thirty-eight', 'times', 'as', 'much', 'as', 'the', 'thames', 'other', 'river', 'so', 'vast', 'drainage-basin:', 'it', 'draws', 'its', 'water', 'supply', 'twenty-eight', 'states', 'territories', 'delaware', 'the', 'atlantic', 'seaboard', 'the', 'country', 'idaho', 'on', 'the', 'pacific', 'slope--a', 'spread', 'forty-five', 'degrees', 'longitude', 'the', 'mississippi', 'receives', 'carries', 'the', 'gulf', 'water', 'from', 'fifty-four', 'subordinate', 'rivers', 'are', 'navigable', 'steamboats', 'from', 'hundreds', 'that', 'are', 'navigable', 'flats', 'and', 'keels', 'the', 'area', 'its', 'drainage-basin', 'is', 'as', 'as', 'the', 'combined', 'areas', 'england', 'wales', 'scotland', 'ireland', 'france', 'spain', 'portugal', 'germany', 'austria', 'italy', 'and', 'turkey', 'and', 'almost', 'all', 'this', 'wide', 'region', 'is', 'fertile', 'the', 'mississippi', 'valley', 'proper', 'is', 'exceptionally', 'so']

我在这里还有另一个常用词列表:

列表2

['a', 'about', 'after', 'again', 'against', 'ago', 'all', 'along', 'also', 'always', 'an', 'and', 'another', 'any', 'are', 'around', 'as', 'at', 'away', 'back', 'be', 'because', 'been', 'before', 'began', 'being', 'between', 'both', 'but', 'by', 'came', 'can', 'come', 'could', 'course', 'day', 'days', 'did', 'do', 'down', 'each', 'end', 'even', 'ever', 'every', 'first', 'for', 'four', 'from', 'get', 'give', 'go', 'going', 'good', 'got', 'great', 'had', 'half', 'has', 'have', 'he', 'head', 'her', 'here', 'him', 'his', 'house', 'how', 'hundred', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'just', 'know', 'last', 'left', 'life', 'like', 'little', 'long', 'look', 'made', 'make', 'man', 'many', 'may', 'me', 'men', 'might', 'miles', 'more', 'most', 'mr', 'much', 'must', 'my', 'never', 'new', 'next', 'no', 'not', 'nothing', 'now', 'of', 'off', 'old', 'on', 'once', 'one', 'only', 'or', 'other', 'our', 'out', 'over', 'own', 'people', 'pilot', 'place', 'put', 'right', 'said', 'same', 'saw', 'say', 'says', 'see', 'seen', 'she', 'should', 'since', 'so', 'some', 'state', 'still', 'such', 'take', 'tell', 'than', 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'thing', 'think', 'this', 'those', 'thousand', 'three', 'through', 'time', 'times', 'to', 'told', 'too', 'took', 'two', 'under', 'up', 'upon', 'us', 'use', 'used', 'very', 'want', 'was', 'way', 'we', 'well', 'went', 'were', 'what', 'when', 'where', 'which', 'while', 'who', 'will', 'with', 'without', 'work', 'world', 'would', 'year', 'years', 'yes', 'yet', 'you', 'young', 'your']

我想对list1中的每个单词进行操作,如果该单词等于list2中的一个单词,则从list1中删除该单词。

这是我试图解决的方法:

for w in text1:
    for j in text2:
        if text[w] == text2[j]:
        text.remove[w]
    print(text)

错误消息

  

text [w] == text2 [j]必须是整数或切片,而不是str

目标是尝试从第一个列表中删除常见单词,但将list2与之比较。这可能是错误的方法。

谢谢。

5 个答案:

答案 0 :(得分:3)

使用列表理解:

lst1 = [x for x in lst1 if x not in lst2]

lst1中取出不在lst2中的项目,这使其变得简洁明了。

评估代码

建议不要在迭代时从列表中删除项目,因为它的行为与预期的有所不同。

另外,Python for就像一个foreach循环,因此当您执行for w in text1:时,您将从text1中取出项目。在这种情况下,text1[w]会抛出TypeError,因为列表索引必须是整数或切片,而不是str。基本上,您只需要在那里w

答案 1 :(得分:1)

您应该考虑使用set()的用途。

您的列表1

>>> lst1 =  ['mississippi', 'well', 'worth', 'reading', 'not', 'commonplace', 'river', 'contrary', 'ways', 'remarkable', 'considering', 'missouri', 'main', 'branch', 'longest', 'river', 'world--four', 'miles', 'seems', 'safe', 'say', 'also', 'crookedest', 'river', 'since', 'in', 'one', 'part', 'journey', 'uses', 'one', 'three', 'miles', 'cover', 'same', 'ground', 'crow', 'fly', 'in', 'six', 'seventy-five', 'it', 'discharges', 'three', 'water', 'st', 'lawrence', 'twenty-five', 'as', 'as', 'rhine', 'three', 'thirty-eight', 'times', 'as', 'much', 'as', 'the', 'thames', 'other', 'river', 'so', 'vast', 'drainage-basin:', 'it', 'draws', 'its', 'water', 'supply', 'twenty-eight', 'states', 'territories', 'delaware', 'the', 'atlantic', 'seaboard', 'the', 'country', 'idaho', 'on', 'the', 'pacific', 'slope--a', 'spread', 'forty-five', 'degrees', 'longitude', 'the', 'mississippi', 'receives', 'carries', 'the', 'gulf', 'water', 'from', 'fifty-four', 'subordinate', 'rivers', 'are', 'navigable', 'steamboats', 'from', 'hundreds', 'that', 'are', 'navigable', 'flats', 'and', 'keels', 'the', 'area', 'its', 'drainage-basin', 'is', 'as', 'as', 'the', 'combined', 'areas', 'england', 'wales', 'scotland', 'ireland', 'france', 'spain', 'portugal', 'germany', 'austria', 'italy', 'and', 'turkey', 'and', 'almost', 'all', 'this', 'wide', 'region', 'is', 'fertile', 'the', 'mississippi', 'valley', 'proper', 'is', 'exceptionally', 'so']

您的列表2

>>> lst2 = ['a', 'about', 'after', 'again', 'against', 'ago', 'all', 'along', 'also', 'always', 'an', 'and', 'another', 'any', 'are', 'around', 'as', 'at', 'away', 'back', 'be', 'because', 'been', 'before', 'began', 'being', 'between', 'both', 'but', 'by', 'came', 'can', 'come', 'could', 'course', 'day', 'days', 'did', 'do', 'down', 'each', 'end', 'even', 'ever', 'every', 'first', 'for', 'four', 'from', 'get', 'give', 'go', 'going', 'good', 'got', 'great', 'had', 'half', 'has', 'have', 'he', 'head', 'her', 'here', 'him', 'his', 'house', 'how', 'hundred', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'just', 'know', 'last', 'left', 'life', 'like', 'little', 'long', 'look', 'made', 'make', 'man', 'many', 'may', 'me', 'men', 'might', 'miles', 'more', 'most', 'mr', 'much', 'must', 'my', 'never', 'new', 'next', 'no', 'not', 'nothing', 'now', 'of', 'off', 'old', 'on', 'once', 'one', 'only', 'or', 'other', 'our', 'out', 'over', 'own', 'people', 'pilot', 'place', 'put', 'right', 'said', 'same', 'saw', 'say', 'says', 'see', 'seen', 'she', 'should', 'since', 'so', 'some', 'state', 'still', 'such', 'take', 'tell', 'than', 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'thing', 'think', 'this', 'those', 'thousand', 'three', 'through', 'time', 'times', 'to', 'told', 'too', 'took', 'two', 'under', 'up', 'upon', 'us', 'use', 'used', 'very', 'want', 'was', 'way', 'we', 'well', 'went', 'were', 'what', 'when', 'where', 'which', 'while', 'who', 'will', 'with', 'without', 'work', 'world', 'would', 'year', 'years', 'yes', 'yet', 'you', 'young', 'your']

列表比较:

>>> newlst = set(lst1) - set(lst2)
>>> newlst
{'uses', 'territories', 'area', 'longitude', 'twenty-eight', 'flats', 'crookedest', 'longest', 'country', 'cover', 'degrees', 'crow', 'six', 'ireland', 'missouri', 'combined', 'fertile', 'st', 'branch', 'commonplace', 'receives', 'draws', 'navigable', 'twenty-five', 'journey', 'pacific', 'carries', 'thirty-eight', 'keels', 'rhine', 'delaware', 'italy', 'thames', 'areas', 'exceptionally', 'england', 'spain', 'valley', 'seaboard', 'drainage-basin', 'seventy-five', 'water', 'almost', 'ways', 'atlantic', 'discharges', 'considering', 'slope--a', 'hundreds', 'part', 'supply', 'lawrence', 'france', 'region', 'safe', 'remarkable', 'vast', 'austria', 'forty-five', 'portugal', 'spread', 'states', 'worth', 'mississippi', 'idaho', 'fly', 'steamboats', 'seems', 'wide', 'scotland', 'germany', 'contrary', 'river', 'ground', 'wales', 'drainage-basin:', 'proper', 'reading', 'rivers', 'fifty-four', 'subordinate', 'turkey', 'world--four', 'gulf', 'main'}

或只需使用:

>>> set(lst1).difference(lst2)

注意:请保持谨慎,因为如果这样做很重要,集合将不会保留顺序

答案 2 :(得分:0)

filterflase

print(list(filterfalse(list2.__contains__,list1)))

演示:

list1=['a','b']
list2=['a']
from itertools import filterfalse
print(list(filterfalse(list2.__contains__,list1)))

输出:

['b']

答案 3 :(得分:0)

如果列表中的项目是唯一的,并且您也不关心订单,则可以使用set

set(list1) - set(list2)

这将返回list1中不在list2中的元素

答案 4 :(得分:0)

所有其他方法似乎都已涉及,这里可用的另一种方法是使用传统的filter 而不是filterfalse 。您可以为list1的所有元素过滤not in list2,结果是出现在words中的所有list2将不包括在过滤结果中

list3 = list(filter(lambda x: x not in list2, list1))