Нужно вывести слово princess из списка с другими символами
castle = [1, ["ce"], 543, "P", ["n", ["r"]], "i", [[["s"]]]]
проблема заключается в том что ["n", ["r"]] эти две буквы под одним индексом. Можно ли вывести слово не трогая список?
Ответы (3 шт):
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
Буквы 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 можно разобраться подобным образом.
До кучи вот ещё рекурсивная разбиралка, которая сама находит индексы элементов, которые нужно печатать. Ну и проверяет, какое слово так собирается:
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