如何在不使用.pop()或.remove()的情况下从项目列表中删除首次出现的特定项目

Dat*_*D96 1 python list

我有一个列表,我们称它为l = [1,2,3,7,8,9,10,7]。给定该列表l,我尝试不使用.pop()或.remove()内置函数来删除数字7的第一次出现。

我试过了

def remove_item(l, item_to_remove):
  newlst = []
  for item in l:
      if item != item_to_remove:
        newlst.append(item)
  return newlst
Run Code Online (Sandbox Code Playgroud)

但是,这将删除我尝试删除的项目的所有实例,而实际上我只想删除该特定项目的第一个实例。有没有人对如何做到这一点有一些提示?

Fra*_*ank 5

您只需要注意,删除代码的部分就不会运行两次。

lst = [1,2,3,7,8,9,10,7]  # [1, 2, 3, 7, 8, 9, 10, 7]
print(lst)
for i in range(len(lst)):
    if lst[i] == 7:
        del lst[i]  # [1, 2, 3, 8, 9, 10, 7]
        break
print(lst)
Run Code Online (Sandbox Code Playgroud)

它与以下内容完全相同:

lst = [1,2,3,7,8,9,10,7]
print(lst)  # [1, 2, 3, 7, 8, 9, 10, 7]
for i in range(len(lst)):
    if lst[i] == 7:
        lst.pop(i)
        break
print(lst)  # [1, 2, 3, 8, 9, 10, 7]
Run Code Online (Sandbox Code Playgroud)

以及这个

lst = [1,2,3,7,8,9,10,7]
print(lst)  # [1, 2, 3, 7, 8, 9, 10, 7]
for i in range(len(lst)):
    if lst[i] == 7:
        lst.remove(lst[i])
        break
print(lst)  # [1, 2, 3, 8, 9, 10, 7]
Run Code Online (Sandbox Code Playgroud)

所用方法概述:

  1. del list [i] -del语句还可用于从列表中删除切片
  2. list.pop-删除并返回索引处的项目(默认为倒数)。如果列表为空或索引超出范围,则引发IndexError。
  3. list.remove-删除第一次出现的值。如果不存在该值,则引发ValueError。