【问题标题】:I am getting ValueError: list.remove(x): x not in list on my code我收到 ValueError: list.remove(x): x not in list on my code
【发布时间】:2022-06-28 22:12:08
【问题描述】:
code_arr=[]
for i in word_tokenize(student_code):
  code_arr.append(i)
print(code_arr)
print(len(code_arr))

codet_arr=[]
for i in word_tokenize(teacher_code):
  codet_arr.append(i)
print(codet_arr)
print(len(codet_arr))

for code_s in code_arr:
  for code_t in codet_arr:
    if code_s==code_t:
      code_arr.remove(code_t)
    else:
      continue

上面的代码给出以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-13-4fe8ea0c7232> in <module>()
      2   for code_t in codet_arr:
      3     if code_s==code_t:
----> 4       code_arr.remove(code_t)
      5     else:
      6       continue

ValueError: list.remove(x): x not in list

【问题讨论】:

标签: python abstract-syntax-tree


【解决方案1】:

在不知道数组内容的情况下很难复制,但我怀疑您的问题在于修改您正在迭代的数组的内容。

为了清楚起见,我倾向于构建一组我想要删除的值,然后在单独的循环中删除它们,即...

to_remove = set()
for code_s in code_arr:
  for code_t in codet_arr:
    if code_s == code_t:
      to_remove.add(code_t)

for code in to_remove:
  code_arr.remove(code)

调试也更容易,因为您可以在删除代码之前检查要删除的代码。

附言。您不需要在循环结束时使用“else continue”。

【讨论】:

    【解决方案2】:

    我认为只需遍历数组的副本即可解决问题

    b = copy.copy(code_arr)
    for code_s in b:
     for code_t in b:
        if code_s==code_t:
          code_arr.remove(code_t)
        else:
          continue
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 2022-06-11
      • 2020-07-11
      • 2023-02-23
      • 2022-12-17
      • 1970-01-01
      相关资源
      最近更新 更多