Нужно вывести слово princess из списка с другими символами

Рейтинг: -1Ответов: 3Опубликовано: 18.02.2023
castle = [1, ["ce"], 543, "P", ["n", ["r"]], "i", [[["s"]]]]

проблема заключается в том что ["n", ["r"]] эти две буквы под одним индексом. Можно ли вывести слово не трогая список?

Ответы

▲ 2
castle = [1, ["ce"], 543, "P", ["n", ["r"]], "i", [[["s"]]]]
print(castle[3]+castle[4][1][0]+castle[5]+castle[4][0][0]+castle[1][0]+castle[6][0][0][0]*2)
Princess
▲ 1

Буквы n и r, наверно, находятся под одним и тем же индексом в списке castle, именно под индексом 4:

["n", ["r"]]              # castle[4]

Но этот четвертый элемент списка castle является сам по себе тоже списком, со своими собственными элементами "n", ["r"] и их индексами 0 и 1:

"n"                       # castle[4][0]
["r"]                     # castle[4][1]

Продолжая это, ["r"] тоже является списком, с одним элементом "r" и эго индексом 0:

"r"                       # castle[4][1][0]

С остальными 1- или 2-буквенными строками находящимися в подсписках списка castle можно разобраться подобным образом.

▲ 1

До кучи вот ещё рекурсивная разбиралка, которая сама находит индексы элементов, которые нужно печатать. Ну и проверяет, какое слово так собирается:

def find_letter(lst, letter):
    for i, item in enumerate(lst):
        if item == letter:
            return [i]
        elif isinstance(item, list) or (isinstance(item, str) and len(item) > 1):
            res = find_letter(item, letter)
            if res:
                return [i] + res
    return []    

def find_word(lst, word, path=''):
    res = []
    for letter in word:
        res.append(find_letter(lst, letter))
    result = f"{'+'.join('lst' + ''.join(f'[{y}]' for y in x) for x in res)}"
    print(f'print({result})')
    print(eval(result))

castle = [1, ["ce"], 543, "P", ["n", ["r"]], "i", [[["s"]]]]
find_word(castle, "Princess")

Вывод:

print(lst[3]+lst[4][1][0]+lst[5]+lst[4][0]+lst[1][0][0]+lst[1][0][1]+lst[6][0][0][0]+lst[6][0][0][0])
Princess