从列表中删除项目

时间:2017-06-05 01:11:09

标签: python

我想删除以忽略列表中的重复项。例如,我们假设该功能会检查以“'”为结尾的单词。'''''并将它们放在一个列表中。我想确保重复的单词不会出现在列表中。

这是我到目前为止所拥有的

def endwords(sent):
    list = []
    words = sent.split()
    for word in words:
        if "." in word:
            list.append(word)
        # bottom if statment does not work for some reason. thats the one i am trying to fix    
        if (word == list):
            list.remove(word)
    return list     

请注意我使用的是Python 3。

5 个答案:

答案 0 :(得分:2)

在添加之前检查单词是否已经在列表中,如下所示:

def endwords(sent):
     wordList = []
     words = sent.split()
     for word in words:
         if "." in word and word not in wordList:
             wordList.append(word)
     return wordList

您正在尝试检查是否word == list,但是看到该单词是否等于整个列表。要检查元素是否在python中的容器中,可以使用in关键字。或者,要检查某个容器中是否有某些内容,您可以使用not in

另一种选择是使用集合:

def endwords(sent):
     wordSet = set()
     words = sent.split()
     for word in words:
         if "." in word:
             wordSet.add(word)
     return wordSet

为了让事情变得更清洁,这里有一个使用集合理解的版本:

def endwords(sent):
    return {word for word in sent.split() if '.' in word}

如果你想从这个函数中获取一个列表,你可以这样做:

def endwords(sent):
    return list({word for word in sent.split() if '.' in word})

既然您在问题中说过要检查单词是否以“。”结尾,您可能还想使用endswith()函数,如下所示:

def endwords(sent):
    return list({word for word in sent.split() if word.endswith('.')})

答案 1 :(得分:2)

陈述后

list = []

您无法使用内置list class并了解您可以花费大约一个小时左右的时间,这就是为什么我们要避免为我们的对象设置内置插件的名称。

更多信息this answer

  

功能检查以''''

结尾的单词。''

声明

"." in word

检查word是否包含点符号(例如,"." in "sample.text"可以正常工作,而它不会以点结尾),如果您需要检查它是否以点结尾 - 请使用{{ 1}}方法。

  

我想确保重复的字词不会出现在列表中。

只需确保在存储之前已经存储过它。

最后我们可以写

str.endswith

测试

def endwords(sent, end='.'):
    unique_words = []
    words = sent.split()
    for word in words:
        if word.endswith(end) and word not in unique_words:
            unique_words.append(word)
    return unique_words

P上。 S上。

如果订单无关紧要 - 请使用>>>sent = ' '.join(['some.', 'oth.er'] * 10) >>>unique_words = endwords(sent) >>>unique_words ['some.'] ,它会处理重复项(仅适用于可散列类型,set可以播放):

str

或使用set comprehension

def endwords(sent, end='.'):
    unique_words = set()
    words = sent.split()
    for word in words:
        if word.endswith(end) and word not in unique_words:
            unique_words.add(word)
    return unique_words

答案 2 :(得分:0)

您可以为问题添加样本判断。

def endwords(sent):
    list = []
    words = sent.split()
    for word in words:
        if "." in word:
            if word not in list:
                list.append(word)
        # bottom if statment does not work for some reason. thats the one i am trying to fix   

    return list

答案 3 :(得分:0)

为什么不使用套装?

def endwords(sent):
    my_list = set()
    words = sent.split()
    for word in words:
        if "." in word:
            my_list.add(word)
    return my_list

答案 4 :(得分:0)

更简洁的方法是使用列表理解,即

my_list = [word for word in words if '.' in word]

为确保元素不重复,只需使用set

my_list = set(my_list)  # No more duplicated values