python - 函数给出错误 ValueError: list.remove(x): x not in list
问题描述
我正在制作一个寻找最近的房子和房子清单的程序。这 3 个函数用于查找课程,当我去打印结果时,最后给了我错误:
File "C:/Users/ASUS/.spyder-py3/tp_1.py", line 88, in percurso
Casas.remove(pos_i)
ValueError: list.remove(x): x not in list
def distancia_casas(P1, P2):
"returns distance between points"
delta_x = P2[0] - P1[0]
delta_y = P2[1] - P1[1]
distance = ((delta_x ** 2) + (delta_y ** 2)) ** 0.5
return distance
def casa_mais_proxima(P, Casas):
pos_inicial = Casas[0]
pos_mini = (len(Casas), len(Casas))
dist_mini = distancia_casas(P, pos_mini)
for c in Casas:
dist = distancia_casas(P, c)
if dist < dist_mini:
pos_mini = c
dist_mini = dist
elif dist == dist_mini and pos_inicial[0] > c[0]:
pos_mini = pos_inicial
elif dist == dist_mini and pos_inicial[0] < c[0]:
pos_mini = c
elif dist == dist_mini and pos_inicial[0] == c[0] and pos_inicial[1] > c[1]:
pos_mini = pos_inicial
elif dist == dist_mini and pos_inicial[0] == c[0] and pos_inicial[1] < c[1]:
pos_mini = c
elif dist > dist_mini:
pos_mini = pos_mini
else:
pos_mini = c
return pos_mini
def percurso(Inicial, Casas):
pos_i = Inicial
course = [pos_i,]
n = len(Casas) - 1
for c in range(n):
print(pos_i, Casas)
pos_i = casa_mais_proxima(pos_i, Casas)
Casas.remove(pos_i)
course.append(pos_i)
if (len(Casas) - 1) != 0:
course.append(Casas[0])
return course
print("percurso", percurso((3,2),[(0,1),(1,0),(1,2),(2,3)]))
谁能帮我?我已经打了 3 天了,但一无所获
解决方案
您不应该在迭代列表时从列表中删除项目。正如错误消息所述,您正在尝试删除不存在的元素。所以:
您可以使用列表推导创建一个仅包含您要删除的元素的新列表:
no_casas = [] for c in range(n): print(pos_i, Casas) pos_i = casa_mais_proxima(pos_i, Casas) no_casas.append(pos_i) course.append(pos_i) for item in no_casas: Casas.remove(item)
但是,这种方法也会导致相同的异常,因为可以多次casa_mais_proxima
返回相同的元素(这是该函数的预期行为吗?)Casa
所以:
您可以使用
Try / Except ValueError
:try: Casas.remove(pos_i) course.append(pos_i) except ValueError: print(str(pos_i) + " not in Casas")
输出:
(3, 2) [(0, 1), (1, 0), (1, 2), (2, 3)]
(2, 3) [(0, 1), (1, 0), (1, 2)]
(3, 3) not in Casas
(3, 3) [(0, 1), (1, 0), (1, 2)]
(3, 3) not in Casas
percurso [(3, 2), (2, 3), (2, 3), (3, 3), (3, 3), (0, 1)]
推荐阅读
- api - Google youtube api 扩展配额
- python-3.x - 如何将两个可能不同的 sqlite3 列表与综合列表进行比较并添加新值?
- reactjs - 下一个 js 从 Json 的特定项目中获取道具
- python - 根据列表重命名列
- python - R 表的 python 等效项(iris$Species)
- c++ - 有没有办法为现代 OpenGL 中的每个键回调设置随机位置?
- java - 在 ElasticSearch 中更新数据
- javascript - 如何使用 web3 创建私钥和公钥?
- sql - 我们可以在 SQL Server 中将用户定义的标量函数调用为内联表值函数吗?
- syntax - 使用 Gatsby Plugin Google Fonts 添加多种字体的语法是什么?