Python - получить подсписок списка, если условие выполнено

У меня есть несколько списков объектов, которые я использую в различных функциях своего проекта, но сначала я должен их проанализировать, чтобы убедиться, что я использую правильные. Я делаю это в своей функции ниже. В настоящее время я использую условную проверку, поскольку в зависимости от расположения объектов в списке они могут иметь разную структуру. Мне любопытно, есть ли способ консолидировать функцию parse () и выполнять поиск в подсписке только в том случае, если условный оператор все еще выполняется.

items = [A,[B,C,D]]

def parse(type):
    if type == 0:
        # returns A
        return items[0]
    elif type == 1:
        # returns B, C, or D
        return items[1][random.randint(0,2)]

примерно так ...

items = [A,[B,C,D]]

def parse(type):
    return items[type] if type == 1: [random.randint(0,2)]

Массив и список - это не одно и то же. Вы используете список.

kabanus 04.12.2018 20:01

Извините, обновлю вопрос.

Dillon Miller 04.12.2018 20:03

Прошу прощения за комментарий немного циничный. Я не являюсь носителем английского языка. Я просто перечитал ваш вопрос около 5 раз и до сих пор не имею ни малейшего представления о том, что вы пытаетесь спросить. Возможно, вы могли бы попытаться полностью переформулировать свой вопрос (более простыми словами и с дополнительным контекстом), пожалуйста.

Mekanik 04.12.2018 20:03

Похоже, что items[type] - это то, что вы ищете, и эта функция вам не нужна.

kabanus 04.12.2018 20:05
Почему в 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
4
726
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам не нужен elif. Вы проверяете одно условие, а затем делаете совершенно другое, независимо от того, что, если это не то условие.

items = [A,[B,C,D]]

def parse(type):
    if type == 0:
    # returns A
        return items[0]
    # returns B, C, or D
    return items[1][random.randint(0,2)]

Я предполагаю, что это то, что вы имели в виду под консолидацией

items = [A, [B, C, D]]

def parse(items, index):
    item = items[index]
    if type(item) is not type(list()):
        return item
    else
        return item[random.randint(0, len(item))]
Ответ принят как подходящий

Вы также должны явно передать items вместо того, чтобы использовать его как глобальную переменную. используйте index вместо type, поскольку он встроен (отмечен @Wyrmwood)

def parse(items, index):
    if isinstance(items[index], list):
        return random.choice(items[index])
    else:
        return items[index]

не переопределять встроенные функции (в данном случае введите)

Wyrmwood 04.12.2018 20:12

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