Вернуть элемент, основанный на другом элементе во вложенном списке в Python - PullRequest
0 голосов
/ 10 мая 2019

У меня есть список с вложенными списками.1-й элемент в каждом гнезде принадлежит друг другу.Вложенные списки можно расширять.Я пытаюсь вернуть один элемент, если я вызываю связанный с ним элемент.

Я могу перечислить их, используя индексы, но поскольку гнездо расширяется, оно не будет работать

Я поставил "песочницу" на здесь .

nested = [['nest1_A', 'nest1_B', 'nest1_C'], ['nest2_A', 'nest2_B', 'nest2_C'], ['nest3_A', 'nest3_B', 'nest3_C']]

print(nested,'\n')

print('First Set')
print(nested[0][0])
print(nested[1][0])
print(nested[2][0],'\n')

print('Second Set')
print(nested[0][1])
print(nested[1][1])
print(nested[2][1],'\n')

print('Third Set')
print(nested[0][2])
print(nested[1][2])
print(nested[2][2],'\n')

print('And so on...')

Я ожидаю, что если я позвоню nest1_A[0], он вернет nest2_A, а nest1_A[1] вернет nest3_A

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Это то, что вы хотите?

def get_nest(nests, id):
    return [x[id] for x in nests if len(x) > id]

Это дает такие результаты:

get_nest(nested, 1)
>>> ['nest1_B', 'nest2_B', 'nest3_B']

А если у вас есть вложенный список другого размера (если нет, вы можете опустить if часть в методе):

nested = [['nest1_A', 'nest1_B', 'nest1_C'], ['nest2_A', 'nest2_B', 'nest2_C'], ['nest3_A', 'nest3_B']]
get_nest(nested, 2)
>>>['nest1_C', 'nest2_C']

РЕДАКТИРОВАТЬ: Удалены подсказки в определении метода

2 голосов
/ 10 мая 2019

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

def get_nested_elements_by_index(nested_list, index):
    output_list = []
    for sub_list in nested_list:
        if len(sub_list) > index:
            output_list.append(sub_list[index])
    return output_list


nested = [
    ["nest1_A", "nest1_B", "nest1_C"],
    ["nest2_A", "nest2_B", "nest2_C"],
    ["nest3_A", "nest3_B", "nest3_C"],
]

print(
    "First set:\n{first}\n\nSecond set:\n{second}\n\nThird set:\n{third}\n".format(
        first="\n".join(get_nested_elements_by_index(nested, 0)),
        second="\n".join(get_nested_elements_by_index(nested, 1)),
        third="\n".join(get_nested_elements_by_index(nested, 2)),
    )
)

Вы можете улучшить функцию, используя понимание списка следующим образом:

def get_nested_elements_by_index(nested_list, index):
    return [sub_list[index] for sub_list in nested_list if len(sub_list) > index]

Что позволяет вам даже забыть о функции и использовать ее как есть.Например, для индекса 0 вы можете написать

...
        first="\n".join(sub_list[0] for sub_list in nested_list),
...

(последний пример - это итератор внутри функции соединения, но он работает почти так же, как и списки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...