在不使用 endswith() 的情况下从列表中删除以后缀结尾的单词
Remove words from a list that end with a suffix without using endswith()
我想编写一个带有 2 个参数的 python 函数:
- 单词列表和
- 结尾字母
我希望我的函数以修改原始单词列表并删除以指定的“结尾字母”结尾的单词的方式工作。
例如:
list_words = ["hello", "jello","whatsup","right", "cello", "estello"]
ending = "ello"
my_func(list_words, ending)
这应该给出以下输出:
list_words = ["whatsup","right"]
它应该弹出所有以函数第二个参数中给出的结尾字母结尾的字符串。
我可以使用 .endswith
方法编写此函数,但不允许我使用它。我还能如何使用循环执行此操作?
尝试:
def my_func(list_words, ending):
return [word for word in list_words if word[len(word)-len(ending):] != ending]
您可以使用 string[-4:]
.
轻松检查字符串的最后 4 个字符
所以你可以使用下面的代码
list_words = ["hello", "jello","whatsup","right", "cello", "estello"]
ending = "ello"
def my_func(wordsArray, endingStr):
endLen = len(endingStr)
output = []
for x in wordsArray:
if not x[-endLen:] == endingStr:
output.append(x)
return output
list_words = my_func(list_words, ending)
您可以像这样 list comprehension 缩短函数:
def short_func(wordsArray, endingStr):
endLen = len(endingStr)
output = [x for x in wordsArray if x[-endLen:] != endingStr]
return output
list_words = short_func(list_words, ending)
最好不要修改现有列表,您可以获得一个没有指定结尾单词的列表,如下所示。如果你想把它作为一个函数,你可以通过以下方式拥有它。您可以再次将格式化列表分配给 list_words。
def format_list(words, ending):
new_list = []
n = len(ending)
for word in words:
if len(word) >= n and n > 0:
if not word[-n:] == ending:
new_list.append(word)
else:
new_list.append(word)
return new_list
list_words = format_list(list_words, ending)
print(list_words)
def filter_words(list_words, ending):
return [*filter(lambda x: x[-len(ending):] != ending , list_words)]
不允许使用endswith
?没问题:-P
def my_func(list_words, ending):
list_words[:] = [word for word in list_words
if not word[::-1].startswith(ending[::-1])]
return list_words
漏洞。
(根据您坚持修改给定列表进行调整。您可能真的应该决定是修改还是修改 return,但是,不要两者都做,这在 Python 中是相当不寻常的。)
我想编写一个带有 2 个参数的 python 函数:
- 单词列表和
- 结尾字母
我希望我的函数以修改原始单词列表并删除以指定的“结尾字母”结尾的单词的方式工作。
例如:
list_words = ["hello", "jello","whatsup","right", "cello", "estello"]
ending = "ello"
my_func(list_words, ending)
这应该给出以下输出:
list_words = ["whatsup","right"]
它应该弹出所有以函数第二个参数中给出的结尾字母结尾的字符串。
我可以使用 .endswith
方法编写此函数,但不允许我使用它。我还能如何使用循环执行此操作?
尝试:
def my_func(list_words, ending):
return [word for word in list_words if word[len(word)-len(ending):] != ending]
您可以使用 string[-4:]
.
所以你可以使用下面的代码
list_words = ["hello", "jello","whatsup","right", "cello", "estello"]
ending = "ello"
def my_func(wordsArray, endingStr):
endLen = len(endingStr)
output = []
for x in wordsArray:
if not x[-endLen:] == endingStr:
output.append(x)
return output
list_words = my_func(list_words, ending)
您可以像这样 list comprehension 缩短函数:
def short_func(wordsArray, endingStr):
endLen = len(endingStr)
output = [x for x in wordsArray if x[-endLen:] != endingStr]
return output
list_words = short_func(list_words, ending)
最好不要修改现有列表,您可以获得一个没有指定结尾单词的列表,如下所示。如果你想把它作为一个函数,你可以通过以下方式拥有它。您可以再次将格式化列表分配给 list_words。
def format_list(words, ending):
new_list = []
n = len(ending)
for word in words:
if len(word) >= n and n > 0:
if not word[-n:] == ending:
new_list.append(word)
else:
new_list.append(word)
return new_list
list_words = format_list(list_words, ending)
print(list_words)
def filter_words(list_words, ending):
return [*filter(lambda x: x[-len(ending):] != ending , list_words)]
不允许使用endswith
?没问题:-P
def my_func(list_words, ending):
list_words[:] = [word for word in list_words
if not word[::-1].startswith(ending[::-1])]
return list_words
漏洞。
(根据您坚持修改给定列表进行调整。您可能真的应该决定是修改还是修改 return,但是,不要两者都做,这在 Python 中是相当不寻常的。)