python - 有没有一种方法可以在 python 中使用 lambda 函数来删除第一次出现
问题描述
我在下面创建了以下 plist。
plist=['D', 'o', 'n', 't', '', 'p', 'a', 'n', 'i', 'c']
现在要完成的任务是删除字符 p,a,n,D 并将其附加到 plist。但这里的一个条件是,如果有两个 n,则只应删除第一个出现的 n。
我尝试使用 lambda 函数删除它们,但无法仅删除第一次出现的 n 。
Lambda 函数:lst=list(filter(lambda x:x.lower() 不在['o','t',"'",'i','c',' '],plist))
有人可以帮助我了解如何做到这一点。
解决方案
删除元素的第一次出现
如果您必须使用 lambda(没有它会更容易)。您可以尝试在 lambda 中返回它:
lambda l,e: [x for i,x in enumerate(l) if i!= (l+[e]).index(e)]
在上面的示例中,如果元素的索引与列表中的第一次出现不同,则返回元素。在索引的审查中,您应该在末尾连接元素以避免异常。如果连接的元素是第一次出现,则索引大于列表中的每个索引,因此您返回所有元素。
如果您不使用 lambda:
def remove_first_occurrence(l,element):
if element in l:
l.remove(element) # removes the first occurence
return l
删除多个元素的第一次出现
如果要删除第一次出现的元素列表:
def remove_first_occurrence_of_multiple_elements(l, elements):
for element in elements:
if element in l:
l.remove(element) # removes the first occurence
return l
plist = ['D', 'o', 'n', 't', ' ', 'p', 'a', 'n', 'i', 'c']
elements_to_remove = ['o', 't', "'", 'i', 'c', ' ']
new_plist = remove_first_occurrence_of_multiple_elements(plist,elements_to_remove)
print(new_plist)
重要的
在这个例子中,它是“O”的不同“o”
我希望它有帮助