获取列表/数组最小值的问题

0 投票
2 回答
2053 浏览
提问于 2025-04-18 13:06

我遇到了一个奇怪的问题,至少我无法解释这种行为的原因。

我用下面定义的 rand_data 函数生成了一些随机值的列表。当我试图用 min() 函数找出最小值时,它却返回了整个列表,这让我觉得它可能不是一个列表,而是一个 数组

但是如果我尝试使用 .min() 属性,就会出现错误:

AttributeError: 'list' object has no attribute 'min'

这到底是怎么回事?x1 是列表还是数组呢?

最小的工作示例:

import numpy as np

def rand_data():
    return np.random.uniform(low=10., high=20., size=(10,))

# Generate data.
x1 = [rand_data() for i in range(1)]

print min(x1)
print x1.min()

2 个回答

0

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常会把它们转换成一种程序能处理的格式。

比如说,如果你有一个数字的字符串“123”,程序可能会把它当作文本来处理,而不是数字。为了让程序能够进行数学运算,我们需要把这个字符串转换成数字,这个过程就叫做“类型转换”。

在不同的编程语言中,类型转换的方式可能会有所不同。有些语言会自动帮你转换,有些则需要你手动去做。

总之,理解数据的类型以及如何转换它们是编程中非常重要的一部分,这样才能让程序正确地处理和使用这些数据。

import numpy as np

def rand_data(num_elements):
# numpy returns always an array with a defined number
# of elements specified by the size parameter
     return np.random.uniform(low=10., high=20., size=num_elements)

#rand_data will automatically generate the random data for you
# simply specifying the number of elements to generate
x1 = rand_data(10)

print('Minimum value for {0} is {1}'.format(x1, min(x1)))
3

你使用了列表推导式:

x1 = [rand_data() for i in range(1)]

现在你有了一个Python列表对象,这个列表里只有一个来自rand_data()的结果。

因为rand_data()使用了numpy.random.uniform(),所以你得到的列表里包含了一个numpy数组。

在这里不要使用列表推导式,这显然不是你想要的结果:

x1 = rand_data()

撰写回答