我想删除以忽略列表中的重复项。例如,我们假设该功能会检查以“'”为结尾的单词。'''''并将它们放在一个列表中。我想确保重复的单词不会出现在列表中。
这是我到目前为止所拥有的
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。
答案 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
如果订单无关紧要 - 请使用>>>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