获取 "unknown variable x" 或 "ValueError" 时将变量与 "int" 的 "type" 放在方法的参数中,即“.remove()”
Getting "unknown variable x" or "ValueError" when putting a variable with the "type" of "int" in a method's parameter i.e.".remove()"
为什么名称(变量)被解释器认为是“未知变量 'x'”,而不是它具有的“值”。`
list_of_names = [1, 1, 1, 1, 1, 2, 2, 2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
name = 0
for name in range(100):
counter = list_of_names.count(name)
while counter > 1:
list_of_names.remove(name)
print(list_of_names)
`
显示的输出:
Traceback (most recent call last):
File "x", line 6, in <module>
list_of_names.remove(name)
ValueError: list.remove(x): x not in list
Process finished with exit code 1
OP 如果您要删除重复项,请使用:
list(set(list_of_names))
set(iterable)
忽略重复项。
这里是the documentation for list.remove
:
s.remove(x)
remove the first item from s where s[i] is equal to x
(3)
注意脚注 (3)
- remove raises ValueError when x is not found in s.
这是一个正在发生的事情的例子:
s = [1, 2, 3]
s.remove(1)
print(s) # [2, 3]
s.remove(1) # ValueError because s does not have a 1
我不确定你试图用你的代码完成什么,但这就是你得到 ValueError 的原因。
因为调用remove
时list_of_names
里面没有name
。我不明白你想用该代码实现什么。但是您可以通过添加一点检查来避免该异常。
list_of_names = [1, 1, 1, 1, 1, 2, 2, 2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
name = 0
for name in range(100):
counter = list_of_names.count(name)
while counter > 1 and name in list_of_names: #Add a check here to avoid the exception
list_of_names.remove(name)
print(list_of_names)
当所有 name
从列表中删除时,while 循环不会终止并仍然尝试删除列表中不存在的 name
。
您需要在 while 循环中减少 counter
的值,以便在列表中没有 name
时终止。
list_of_names = [1, 1, 1, 1, 1, 2, 2, 2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
name = 0
for name in range(100):
counter = list_of_names.count(name)
while counter > 1:
counter -= 1
list_of_names.remove(name)
print(list_of_names)
[1, 2, 3]
我发现了一些问题:
首先,您遇到问题的主要原因是您的 counter
语句实际上并没有减少,因为它在 while
语句之外。
我用这段代码让它工作:
list_of_names = [1, 1, 1, 1, 1, 2, 2, 2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
name = 0
for name in list_of_names:
while True:
counter = list_of_names.count(name)
if counter < 1:
break
print(f"Counter: {counter}")
print(name in list_of_names)
print(name)
print(list_of_names)
list_of_names.remove(name)
print(list_of_names)
while counter > 1:
list_of_names.remove(name)
该循环将(尝试)永远 运行,因为您没有在循环内更改 counter
。
如果它从 5 开始,那么它将永远是 5,因为循环中的任何内容都不会改变它。最终您将从列表中删除最后一次出现的 name
,然后下一个循环迭代将崩溃。
为什么名称(变量)被解释器认为是“未知变量 'x'”,而不是它具有的“值”。`
list_of_names = [1, 1, 1, 1, 1, 2, 2, 2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
name = 0
for name in range(100):
counter = list_of_names.count(name)
while counter > 1:
list_of_names.remove(name)
print(list_of_names)
` 显示的输出:
Traceback (most recent call last):
File "x", line 6, in <module>
list_of_names.remove(name)
ValueError: list.remove(x): x not in list
Process finished with exit code 1
OP 如果您要删除重复项,请使用:
list(set(list_of_names))
set(iterable)
忽略重复项。
这里是the documentation for list.remove
:
s.remove(x) remove the first item from s where s[i] is equal to x (3)
注意脚注 (3)
- remove raises ValueError when x is not found in s.
这是一个正在发生的事情的例子:
s = [1, 2, 3]
s.remove(1)
print(s) # [2, 3]
s.remove(1) # ValueError because s does not have a 1
我不确定你试图用你的代码完成什么,但这就是你得到 ValueError 的原因。
因为调用remove
时list_of_names
里面没有name
。我不明白你想用该代码实现什么。但是您可以通过添加一点检查来避免该异常。
list_of_names = [1, 1, 1, 1, 1, 2, 2, 2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
name = 0
for name in range(100):
counter = list_of_names.count(name)
while counter > 1 and name in list_of_names: #Add a check here to avoid the exception
list_of_names.remove(name)
print(list_of_names)
当所有 name
从列表中删除时,while 循环不会终止并仍然尝试删除列表中不存在的 name
。
您需要在 while 循环中减少 counter
的值,以便在列表中没有 name
时终止。
list_of_names = [1, 1, 1, 1, 1, 2, 2, 2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
name = 0
for name in range(100):
counter = list_of_names.count(name)
while counter > 1:
counter -= 1
list_of_names.remove(name)
print(list_of_names)
[1, 2, 3]
我发现了一些问题:
首先,您遇到问题的主要原因是您的 counter
语句实际上并没有减少,因为它在 while
语句之外。
我用这段代码让它工作:
list_of_names = [1, 1, 1, 1, 1, 2, 2, 2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
name = 0
for name in list_of_names:
while True:
counter = list_of_names.count(name)
if counter < 1:
break
print(f"Counter: {counter}")
print(name in list_of_names)
print(name)
print(list_of_names)
list_of_names.remove(name)
print(list_of_names)
while counter > 1:
list_of_names.remove(name)
该循环将(尝试)永远 运行,因为您没有在循环内更改 counter
。
如果它从 5 开始,那么它将永远是 5,因为循环中的任何内容都不会改变它。最终您将从列表中删除最后一次出现的 name
,然后下一个循环迭代将崩溃。