我试图理解以下函数的作用,特别是if
部分的作用:
def remove(items, value):
new_items = []
found = False
for item in items:
if not found and item == value:
found = True
continue
new_items.append(item)
if not found :
raise ValueError('list.remove(x): x not in list')
return new_items
语句if not found and item == value:
和变量found
的技巧。有人能具体解释一下吗?你知道吗
谢谢,现在我理解了上面的示例代码片段。我可以写代码来实现我的想法
My idea is to first make sure the value is in the initial list . then compare every item with that value, add the item which doesn't satisfy condition item != value to a new list new_items, finally return the new list.
def remove(items, value):
new_items = []
for item in items:
if item == value :
continue
else :
new_items.append(item)
if len(items) == len(new_items):
print("This value is not in the list")
return new_items
found
只是一个标志;当它是False
(not found
是True
)时,您检查每个item
与目标value
。找到匹配项时,将found
设置为True
,并绕过匹配的项(continue
跳过循环体的其余部分,立即返回循环的顶部,因此不会调用append
)。你知道吗之后,
not found
总是False
,由于and
是短路测试,如果左手侧是False
,那么右手侧甚至没有检查。从那以后,您只需在运行时附加所有剩余的项。通过使用标志并首先检查它,您可以:list
中删除多个value
副本not somebool
是Python中最便宜的测试),从而使代码速度加快了一点因为
found
被初始化为False
,这意味着not found
被计算为True
,所以当我们迭代这些项时,在找到我们要查找的项之前,我们将对每个item == value
进行比较,如果它的计算结果为True
,我们将进入if
主体并执行两件事情:found
的值修改为True
:这意味着从现在开始 我们再也不会进入if
块了continue
我们将“跳转”到添加此项的部分 找到总而言之:当我们在迭代过程中遇到第一个出现的
value
时,我们将翻转标志found
的值,并跳过将其添加到新列表的部分。这将导致将所有但此项添加到新列表中。你知道吗相关问题 更多 >
编程相关推荐