Python:查找数组中元素的位置

Posted

技术标签:

【中文标题】Python:查找数组中元素的位置【英文标题】:Python: find position of element in array 【发布时间】:2015-01-31 08:55:44 【问题描述】:

我有一个 CSV,其中包含天气数据,例如气象站的最高和最低温度、降水量、经度和纬度等。每种数据类别都存储在单个列中。

我想找到最高和最低温度的位置。找到最大值或最小值很容易: numpy.min(my_temperatures_column)

如何找到最小值或最大值所在的位置,以便找到经纬度?

这是我的尝试:

def coldest_location(data):

coldest_temp= numpy.min(mean_temp)

    for i in mean_temp:
         if mean_temp[i] == -24.6:
            print i

错误:列表索引必须是 int

我将 CSV 的每一列都保存到变量中,所以它们都是单独的列表。

lat          = [row[0] for row in weather_data]  # latitude
long         = [row[1] for row in weather_data]  # longitude
mean_temp    = [row[2] for row in weather_data]  # mean temperature 

我已经按照建议 list.index(x) 解决了问题

mean_temp.index(coldest_temp) 

coldest_location=[long[5],lat[5]] 

不确定在一个问题中提出第二个问题是否合适,但如果有两个位置的最低温度相同怎么办?我怎样才能找到两者及其索引?

【问题讨论】:

如果您的所有数据都在单独的列表中。您可以找到min 的索引号,然后使用它来查找出现在经度和纬度列表中相同位置的元素。如果您可以粘贴您的csv 文件的 sn-p,它会更容易看到 How to get item's position in a list?的可能重复 【参考方案1】:

你有没有想过使用 Python 列表的 .index(value) 方法?它返回在列表中找到第一个传入的value 实例的索引。

【讨论】:

当在 for 循环中访问这些索引时,当遍历相关错误(python 3)时,这似乎不起作用。就像给其他人的注释一样(我赞成这个答案)。 @cslotty 你能找到在循环中运行索引的解决方案吗? @lampre409 如果我猜对了,您可以使用枚举函数:programiz.com/python-programming/methods/built-in/enumerate【参考方案2】:

如果没有实际看到您的数据,很难说在您的特定情况下如何找到最大值和最小值的位置,但一般来说,您可以按如下方式搜索位置。这只是下面的一个简单示例:

In [9]: a=np.array([5,1,2,3,10,4])

In [10]: np.where(a == a.min())
Out[10]: (array([1]),)

In [11]: np.where(a == a.max())
Out[11]: (array([4]),)

或者,您还可以执行以下操作:

In [19]: a=np.array([5,1,2,3,10,4])

In [20]: a.argmin()
Out[20]: 1

In [21]: a.argmax()
Out[21]: 4

【讨论】:

为什么np.where() 返回一个包含索引数组的列表,而不仅仅是索引数组?在numpy.org/doc/stable/reference/generated/numpy.where.html 中看不到答案【参考方案3】:

正如 Aaron 所说,您可以使用.index(value),但如果value 不存在,则会引发异常,因此您应该处理这种情况,即使您确定它永远不会发生。有几个选项是先检查它的存在,例如:

if value in my_list:
    value_index = my_list.index(value)

或通过如下方式捕获异常:

try:
    value_index = my_list.index(value)
except:
    value_index = -1

正确的错误处理永远不会出错。

【讨论】:

对于第二个问题,您可以使用“列表理解”。这些可能看起来很棘手,但是一旦你掌握了它们,它们就会产生非常紧凑的代码。在您的情况下:[i for i in range(len(my_list)) if my_list[i] == value] 将返回请求的索引列表。如果没有匹配项,列表将为空,如果有匹配项,则列表将包含一个或多个元素。 您的答案可以通过指定缺失值将导致ValueError 被抛出来改进,因此您应该专门except ValueError:【参考方案4】:

对于您的第一个问题,使用 index() 在列表 x 中查找某个 的位置,如下所示:

x.index(value)

对于第二个问题,要检查多个相同的值,您应该将列表分成块并使用上面的相同逻辑。他们说分而治之。有用。试试这个:

value = 1 
x = [1,2,3,4,5,6,2,1,4,5,6]

chunk_a = x[:int(len(x)/2)] # get the first half of x 
chunk_b = x[int(len(x)/2):] # get the rest half of x

print(chunk_a.index(value))
print(chunk_b.index(value))

希望有帮助!

【讨论】:

【参考方案5】:

在 NumPy 数组中,你可以像这样使用 where:

np.where(npArray == 20)

【讨论】:

【参考方案6】:

你应该这样做:

try:
    value_index = my_list.index(value)
except:
    value_index = -1;

【讨论】:

你能解释一下你的答案吗?【参考方案7】:

有一个内置的方法可以做到这一点:

numpy.where()

您可以在excellent detailed documentation 中找到更多相关信息。

【讨论】:

【参考方案8】:

假设列表是对象的集合,如下所示:

obj =  [
        

            "subjectId" : "577a54c09c57916109142248", 
            "evaluableMaterialCount" : 0, 
            "subjectName" : "ASP.net"

        , 
        

            "subjectId" : "56645cd63c43a07b61c2c650", 
            "subjectName" : ".NET",         
        , 
        

            "subjectId" : "5656a2ec3c43a07b61c2bd83", 
            "subjectName" : "Python",

        , 
        

            "subjectId" : "5662add93c43a07b61c2c58c", 
            "subjectName" : "HTML"
        
    ]

您可以使用以下方法查找索引。假设 subjectId 为 5662add93c43a07b61c2c58c 则获取该对象在列表中的索引,

subjectId = "5662add93c43a07b61c2c58c"

for i, subjobj in enumerate(obj):
    if(subjectId == subjobj['subjectId']):
        print(i)

【讨论】:

【参考方案9】:

我会假设您的变量 mean_temp 已经加载了值并且是 nX1 维度(即只有一行)。现在要实现您想要的,您可以:

更改变量的数据类型:

def coldest_location(data):

    mean_temp = numpy.mat(mean_temp) #data is now matrix type
    min_index = numpy.nonzero(mean_temp == mean_temp.min())  # this returns list of indexes
    print mean_temp[min_index[0],min_index[1]] # printing minimum value, i.e -24.6 in you data i believe

【讨论】:

以上是关于Python:查找数组中元素的位置的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 | Python

怎么查找python列表中元素的位置

Leetcode刷题Python34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)

Python描述 LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

在python中找到一个numpy数组中元素的位置[重复]

如何从一个数组中查找指定的元素,并返回这个元素在数组中的位置