首页 > 解决方案 > Python抛出ValueError:list.remove(x):x不在列表中(不在列表上迭代)

问题描述

我正在尝试解决 Vasya-Clerk 的 codewars kata。我收到值错误,因为我正在从列表中删除项目。我读到我应该制作列表的副本,但由于我没有迭代列表本身,而只是附加和删除值,所以我不太清楚如何以及在何处使用命令 [:] 进行此复制。我知道我可以用字典更好地解决这个问题,但如果可能的话,我想用列表来完成它。

以下是说明: 新的“复仇者联盟”电影刚刚上映!电影院售票处有很多人排着长队。他们每个人都有一张 100、50 或 25 美元的钞票。“复仇者联盟”的票价为 25 美元。Vasya 目前是一名文员。他想把一张票卖给这条线上的每个人。如果 Vasya 最初没有钱并且严格按照人们排队的顺序出售门票,是否可以向每个人出售一张票并找零?返回 YES,如果 Vasya 可以向每个人出售一张票并用他当时手头的账单找零。否则返回 NO

def tickets(people):  
    cash = []
    for bill in people:
      if bill == 25:
        cash.append(bill)
      elif bill == 50:
        if 25 in cash:
          cash.append(bill)
          cash.remove(25)
        else:
          return "NO"
      elif bill == 100:
        if 25 and 50 in cash:
          cash.append(bill)
          cash.remove(25)
          cash.remove(50)
        elif 25 and 25 and 25 in cash:
          cash.append(bill)
          cash.remove(25)
          cash.remove(25)
          cash.remove(25)
        else:
          return "NO"
      else:
        return "NO"

    return "YES"

test.assert_equals(tickets([25, 25, 50]), "YES")
test.assert_equals(tickets([25, 100]), "NO")

标签: python

解决方案


您的问题在于以下两行:

if 25 and 50 in cash:

elif 25 and 25 and 25 in cash:

与您的假设相反,第一个与 相同,50 in cash第二个评估为25 in cash。相反,您要正确指定条件,并计算 25 的现金数量。他们成为:

if 25 in cash and 50 in cash:

elif cash.count(25) >= 3:

推荐阅读