如何使用 python 删除和替换列表中的元素

how to remove and replace an element in a list using python

    def functionA():
countries = ["Nigeria", "Uganda", "America", "Chad"]
print(countries)

name1 = input("choose a country you don't like:")
for i in range(3):
    
    if countries[i] == name1:
        print(f"The selected country is {name1}")
        countries.pop(i)
        name2 = input("choose a country you want like:")
        countries.insert(i, name2)

        print(countries)
        break
        
    else:
        print("try again")
        functionA()

函数A()

我继续运行程序,但循环总是不正确

这是因为 for 循环内部的逻辑:如果第一个元素不等于 name1,将再次调用 functionA。您应该检查是否在 for 循环的末尾找到了 name1。

def functionA():
  countries = ["Nigeria", "Uganda", "America", "Chad"]
  print(countries)

  name1 = input("choose a country you don't like:")
  found = False
  for i in range(len(countries)):  # More robust, in case you need to change the list's size
      
      if countries[i] == name1:
          print(f"The selected country is {name1}")
          name2 = input("choose a country you want like:")
          countries[i] = name2 # We can just replace name1 with name2.

          print(countries)
          found = True
          break
          
  if not found:
    print("try again")
    functionA()
functionA() 

您也可以使用 index:

以更简洁的方式获得相同的结果
def functionA():
  countries = ["Nigeria", "Uganda", "America", "Chad"]
  print(countries)

  name1 = input("choose a country you don't like:")
  index = countries.index(name1)
  if(index == -1):
    print("try again")
    functionA()
  else:
    name2 = input("choose a country you want like:")
    countries[index] = name2 # We can just replace name1 with name2.
    print(countries)
functionA()

countries.index(name1) returns -1 iff name1 不在列表中,否则它 returns 我们可以找到它的索引。

1 如果代码全部在functionA

2要遍历国家的长度(这样才能判断最后一个元素)

3应该使用continue跳出这个循环而不是callback

def functionA():
    countries = ["Nigeria", "Uganda", "America", "Chad"]
    print(countries)

    name1 = input("choose a country you don't like:")
    for i in range(len(countries)):
        if countries[i] == name1:
            print(f"The selected country is {name1}")
            countries.pop(i)
            name2 = input("choose a country you want like:")
            countries.insert(i, name2)

            print(countries)
            break

        else:
            print("try again")
            continue


functionA()

以后你应该尝试更好地解释你面临的问题,不管你的问题有多复杂。

(值得一提的是 Python 已经内置了查找数组中元素索引的方法,但我假设您想自己实现一些东西)

现在,您的函数的问题是,如果名字与输入不匹配,将再次调用该函数,而不是移动到下一次迭代。最简单和最快的解决方案是添加一个标志来检查是否找到了所选国家/地区。此外,如果您需要索引,那么循环遍历列表的更 pythonic 方法是使用 enumerate 函数。所以最后:

def functionA():
    countries = ["Nigeria", "Uganda", "America", "Chad"]
    print(countries)

    was_found = False
    name1 = input("choose a country you don't like:")
    for i, country_name in enumerate(countries):
        if country_name == name1:
            print(f"The selected country is {name1}")
            countries.pop(i)
            name2 = input("choose a country you want like:")
            countries.insert(i, name2)
            print(countries)
            was_found = True
            break
        
    if not was_found:
        print("try again")
        functionA()

一个更优雅的解决方案是首先不将重试逻辑添加到此函数中,而只是 return 用 None 或空字符串初始化的默认值,然后处理它在函数之外。

试试这个

def functionA():
    countries = ["Nigeria", "Uganda", "America", "Chad"]
    removeIndex = 0
    print(countries)

    while True:
        name1 = input("choose a country you don't like:")
        if name1 not in countries:
            print("try again")
            continue
        print(f"The selected country is {name1}")
        removeIndex = countries.index(name1)
        countries.pop(removeIndex)
        name2 = input("choose a country you want like:")
        countries.insert(removeIndex, name2)
        print(countries)
        break