Индексирование 2d массивов / списков - PullRequest
1 голос
/ 27 февраля 2020

Привет. Я пытаюсь найти индекс двумерного массива, но мне удалось найти способ индексирования каждой строки за раз. К сожалению, это бесполезно, так как я не могу найти индекс для другого после того, как первый оператор индексации не смог найти слово в списке.

Вот код, который я пытался использовать:

if not button:#code to be ran if in test screen
    #print("Test Mode")
    time.sleep(0.4)
    Wordtotranslate = self.driver.find_element_by_xpath('/html/body/div[4]/div[3]/div/div/div[1]/div[1]/div/div')
    Wordtotranslate = Wordtotranslate.text
    print(Wordtotranslate)
    def in_list():
        for i, sublist in enumerate(words_list2d):
            if Wordtotranslate in sublist:
                return i
        return -1
    in_list()

Я получаю ошибку:

Eng_Index = words_list2d [0] .index (Wordtotranslate)

ValueError: 'on' нет в списке

Короче говоря, я ищу, чтобы найти положение элемента (строки) в 2d массиве / списке в python

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 27 февраля 2020

Вот пример обхода двумерного массива и извлечения значений индекса для элементов, которые соответствуют критериям.

Пара замечаний:

  • Я использовал произвольные данные примера, так как вы не включили подробности о значениях, с которыми вы имеете дело
  • Я продемонстрировал обработку дублированных значений в двумерном массиве. В зависимости от ваших предположений, вам может потребоваться настроить логи c (например, обработка дубликатов в words_to translate, возможно, вы использовали list.index(), потому что заботитесь только о первом экземпляре, например c.)
import collections

words_list2d = [
    ['here', 'are', 'example'],
    ['words', 'in', 'a'],
    ['2d', 'array', 'with'],
    ['duplicate', 'words', 'duplicate'],
]

words_to_translate = ['example', 'array', 'duplicate', 'words']

word_indexes = collections.defaultdict(list)

for row_index, row in enumerate(words_list2d):
    for value_index, value in enumerate(row):
        for word in words_to_translate:
            if word == value:
                word_indexes[word].append((row_index, value_index))
                break

for word in word_indexes:
    print(f"{word}: {word_indexes[word]}")

Вывод:

$ python3 find_words_in_2d_array.py
example: [(0, 2)]
words: [(1, 0), (3, 1)]
array: [(2, 1)]
duplicate: [(3, 0), (3, 2)]
...