Индекс для многомерного списка (вложенный список)

Предполагая, что у меня есть список ниже, как я могу найти все индексы идентифицированного объекта в списке

ЧТО Я ОЖИДАЮ (ВСЕ индексы «пера»):

OUTPUT: (0,0),(3,4),(4,4),(4,2),(3,4)
a_list = [['pen', 'pencil', 'eraser'], 
          ['ruler', 'paper', 'pen'], 
          ['pen', 'pen', 'bag'], 
          ['pencil', 'pen', 'paper']]


def finding(listoflist, stationary):
    for i in listoflist:
        if stationary in i:
            return (i.index(stationary)),(listoflist.index(i))

finding(a_list, 'pen')

OUTPUT: (0, 0)

Вам нужно собрать все значения, а не возвращаться к первому

azro 30.12.2022 17:23

Не понимаю, почему у этого поста тег numpy?!

Daniel Hao 30.12.2022 20:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
58
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Может быть, вы можете попробовать это сначала:

Объясните - поскольку это вложенные списки, вам нужно сначала зациклить каждый подсписок, а затем просмотреть каждый элемент, чтобы проверить, является ли он стационарным.


a_list = [['pen', 'pencil', 'eraser'], 
          ['ruler', 'paper', 'pen'], 
          ['pen', 'pen', 'bag'], 
          ['pencil', 'pen', 'paper']]


def finding(lsts, stationary):
    result = []
    
    for i, ll in enumerate(lsts):
        for j, item in enumerate(ll):
            if item == stationary:
                result.append((i, j))
    return result

print(finding(a_list, 'pen'))
# [(0, 0), (1, 2), (2, 0), (2, 1), (3, 1)]

# You can even do this in one List Comprehension, if you'd like short code: 

ans = [(i, j) for i, ll in enumerate(lsts) for j, item in enumerate(ll) if item == 'pen']
def fun(a_list,search_item):
    res=[]
    for i1,nest in enumerate(a_list):
        for i2,item in enumerate(a_list[i1]):
            if item==search_item:
                res.append((i1,i2))
    return res

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

pigrammer 30.12.2022 18:36

Прошу прощения, но к тому времени, когда я опубликовал свой, других ответов не было.

Иван Балван 30.12.2022 23:20

Извините, я предположил, что это обман, потому что он был в LQA; кроме того, все ответы были опубликованы «6 часов назад», поэтому я не могу сказать, какой из них был первым.

pigrammer 30.12.2022 23:34

Поскольку он был помечен как numpy, вот подход numpy:

import numpy as np

stationary = np.array([
    ['pen', 'pencil', 'eraser'], 
    ['ruler', 'paper', 'pen'], 
    ['pen', 'pen', 'bag'], 
    ['pencil', 'pen', 'paper']
])

out = list(zip(*np.where(stationary == "pen")))
[(0, 0), (1, 2), (2, 0), (2, 1), (3, 1)]

Другие вопросы по теме