【问题标题】:ValueError: min() arg is an empty sequenceValueError: min() arg 是一个空序列
【发布时间】:2019-04-30 04:20:43
【问题描述】:

我目前正在编写高速公路交通模型。在决定前车之间的距离时,我被困在 min() 上。它不知何故是一个空序列。

Traceback(最近一次调用最后一次):

[93, 72, 55]

文件“C:/Users/Try Arie/PycharmProjects/traffic_model/traffic.py”,第 44 行,在

55

[]

d = min(dlist)

ValueError: min() arg 是一个空序列

我检查了距离列表的值。它应该在里面并使用 min(),我将把最小值赋给 d。但它没有

class car:

    def __init__(self, no, x, v):
        self.no = no
        self.x = x
        self.v = v


for i in range(N):
    cars.append(car(i+1, randint(0, 100), 0))

for i in range(N):

    dlist = []

    for j in range(N):
        if cars[j].x > cars[i].x:
            dlist.append(cars[j].x)

    print(dlist)

    d = min(dlist)

    print(d)

我想要值 d 55,然后我可以将它用于我的下一个代码

【问题讨论】:

  • 如果有人想知道每辆车的 x(位置),这里:53、93、1、38、47、24、34、72、55、20
  • 不知何故 if cars[j].x > cars[i].x: 这个条件不满足,dlist 保持为空导致错误
  • print(dlist) 显示什么?
  • print(dlist) 打印列表中的所有值。它是 [93, 72, 55]。

标签: python python-3.x min


【解决方案1】:

dlist 将为 i 为空,其中 cars[i].x 的值最大。对于这个i,测试cars[j].x > cars[i].x 永远不会为真,因此您永远不会将任何内容附加到dlist

正如您在输出中看到的那样,确实发生了这种情况:在i 的第一次迭代中,您会发现所有 x 大于 53 的汽车:[93, 72, 55] 并且您还打印了 55。在下一次迭代中,您会发现x 大于 93 的所有汽车。没有这样的汽车,因此您会得到一个空的 dllist [],然后 min 会引发异常。

您要么必须明确处理空的特殊情况,要么在测试中使用>= 而不是>

顺便说一句,按x 对汽车进行分类不是更快/更容易吗?然后在排序列表中的位置k,在所有x 大于或等于cars[k].x 的汽车中,您拥有最少的汽车。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 2014-11-26
    • 2016-07-03
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多