seregazolotaryow64
@seregazolotaryow64
Программист отдела интернет-маркетинга

Как правильно получить номер элемента многомерного массива?

Добрый день!
Я до сих пор пытаюсь разобраться с получением номера элемента многомерного массива.
Кусок кода, где это применяется:

mls_scc = LearnMaxLevelDataArray("school")

        for rowm, index in mls_scc:

            if row['gender'] == "M": 
                input_ssc_level = rd[rowm[1][0].index(index)].value
            if row['gender'] == "F": 
                input_ssc_level = rd[rowm[0][0].index(index)].value

            maxlevelbalance = 100 - input_ssc_level #Получает баланс уровня от максимального уровня критерии
            userlevelbalance = 100 - row['ssc_p']

            if maxlevelbalance > userlevelbalance:
                    levelbalance = maxlevelbalance - userlevelbalance #Подсчитываем баланс от уровня

            if maxlevelbalance < userlevelbalance:
                levelbalance = userlevelbalance - maxlevelbalance

            for rowms, index in mlsb.iterrows():
                if levelbalance == rowms[index] or levelbalance > rowms[index]:

                    #Если текущий баланс уровня соответствует нужным критериям, то система для списка успешных выпускников оставит уровень школьных знании, которого добился выпускник
                    sgl['profile']['info']['school'] = row['ssc_p']

LearnMaxLevelDataArray-сама функция реализованная мной, которая состоит из многомерных массивов и отбирает по ключу коды ячеек таблицы Excel для выборки максимальных значенй.
И компилятор принёс немного сюпризов:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 
     43 
     44             if row['gender'] == "M":
---> 45                 input_ssc_level = rd[rowm[1][0].index(index)].value
     46             if row['gender'] == "F":
     47                 input_ssc_level = rd[rowm[0][0].index(index)].value

TypeError: must be str, not list

Внутри [] я применил метод index для получения номера элемента массива.
Он требует, чтобы функция была списком, а код функции я пришлю в комментариях к вопросу.

Как Python может правильно получить номер элемента многомерных массивов?
  • Вопрос задан
  • 66 просмотров
Решения вопроса 2
SoreMix
@SoreMix Куратор тега Python
yellow
TypeError: must be str

Он требует, чтобы функция была списком

Почти

Непонятно что такое mls_scc и какой в ней контент, как решать ошибку?

Я так понимаю здесь планировалось нечто в виде. А зачем тогда .index()
for index, rowm in enumerate(mls_scc):
    if row['gender'] == "M": 
        input_ssc_level = rd[rowm[1][0].index(index)].value
    if row['gender'] == "F": 
        input_ssc_level = rd[rowm[0][0].index(index)].value
Ответ написан
@grecha10
Не совсем понятен вопрос.
Если под "номером" элемента массива вы подразумеваете индекс, то для многомерного массива индекс будет составным, а не единственным числом. Например:

mls_scc[0][0][0] # -> BV6

В этом коде вы передаете в переменной index список, а должны передавать единственное значение.

input_ssc_level = rd[rowm[1][0].index(index)].value


Напишите вот так, что бы увидеть что попадает в эту переменную:
for rowm, index in mls_scc:
    print(index) # -> ['BV7', 'BX7', 'BZ7', 'CB7', 'CD7', 'CE7', 'CG7', 'CI7'] -> ['BW7', 'BY7', 'CA7', 'CC7', 'CF7', 'CH7', 'CJ7']
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@anerev
Намудрили конечно) У вас есть основной список da он состоит из 2 объектов, вы вызываете цикл for который проходит соответственно по 2 объектам, переменные rowm, index это два отдельных непересекающихся списка. Короче
input_ssc_level = rd[>>>>rowm[1][0].index(index)<<<<].value
rowm[1][0] - вы обращаетесь не к списку, а к тексту, точнее даже к букве текста и после этого пытаетесь к ней вызвать метод индекса передавая список
Ответ написан
deeppsycoder
@deeppsycoder
клинический психолог
Если a - многомерный массив, а x - значение массива, индекс которого нужно найти, то можно так.
import numpy as np

indeces = np.unravel_index((a == x).argmax(), a.shape)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы