我有一个列表,比如E[][],其中E有10个子列表,每个子列表有大约500个条目。
我主要关心的是计算所有5000个值中的最大值,这些值分布在10个子列表中。
我写的是:
MinVal = min(min(E[i]) for i in range(len(E)))
它给了我这个错误:ValueError:min()arg是一个空序列
现在我写下:
min_arr = []
for i in range(len(E)):
min_arr.append(min(E[i]))
MinVal = min(min_arr)
它给了我同样的错误:ValueError:min()arg是一个空序列
所以,我试着这样做:
print(max(E[1]))
它确实给了我答案
前两个代码也适用于5-10个小元素列表。但是显示了一个大数据集的问题。
我该怎么办?
要使用生成器表达式通过嵌套循环展平列表:
您的错误表示至少有一个子列表是空的,但是上面的子列表自然会跳过这样的空子列表。
如果需要同时确定最小值和最大值,请不要使用两个循环。使用一个循环并“手动”跟踪最小值和最大值:
这样可以确保只在大量值上循环一次。
您的代码:
当
E[i] == []
时失败,因为没有空集最小值的合理定义。因此,您需要跳过空的子列表。一种选择是:大致相当于:
(注意,实际上您没有在任何地方使用索引
i
,因此可以直接在E
上迭代。)5000件不是那么多,你可能不需要太担心效率。
相关问题 更多 >
编程相关推荐