Python: найти позицию элемента в массиве

У меня есть CSV, содержащий данные о погоде, такие как максимальная и минимальная температуры, осадки, долгота и широта метеорологических станций и т.д. Каждая категория данных хранится в одном столбце.

Я хочу найти расположение максимальной и минимальной температур. Найти max или min легко: 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]] 

Не уверен, что задание второго вопроса в вопросе является правильным, но что, если есть два местоположения с одинаковой минимальной температурой? Как я могу найти оба и их индексы?

Ответ 1

Вы думали об использовании списка Python .index(value)? Он возвращает индекс в списке того, где найден первый экземпляр value.

Ответ 2

Без фактического просмотра ваших данных трудно сказать, как найти местоположение max и min в вашем конкретном случае, но в целом вы можете искать местоположения следующим образом. Это простой пример ниже:

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

Ответ 3

Как утверждает Аарон, вы можете использовать .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

Вы не можете ошибиться при правильной обработке ошибок.

Ответ 4

Вам следует:

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

Ответ 6

Я бы предположил, что ваша переменная 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

Ответ 7

Предположим, что список представляет собой набор объектов, как показано ниже:

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)

Ответ 8

Для вашего первого вопроса найдите положение некоторого значения в списке x, используя index(), например так:

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))

Надеюсь, это поможет!