Как найти элемент в списке если он находиться в другом списке?

Здрасьте, пишу помощницу.

Пример: Есть элемент списка «text_split». Он же есть и в списке «lst_cmd_write», который находиться в списке «lst_cmd».

Проблема: Почему python не видит элемент в глобальном списке «lst_cmd», но если уточнить(заменить на «lst_cmd_write») что он находиться в «lst_cmd_write», то видет?

Обязательно надо сохранить названия подсписков, так как списки - это база данных и в будущем она будет больше...

Код:

lst_cmd_start = ["открыть","открой","запустить","запусти",]
lst_cmd_write = ["записать", "запиши", "напиши", "написать","запишешь","запишете","запишите",]
lst_parasites = ["пожалуйста", "можешь", "будь добра",]
lst_greetings = ["привет","приветствую","приветик",]

lst_cmd = [lst_cmd_start, lst_cmd_write]
print(lst_cmd)
lst_global = [lst_cmd, lst_parasites, lst_greetings]


process = input("").lower()
text_split = process.split(" ")
print(text_split)

i_txt=0
i_lst=0
while len(text_split):
    if i_txt >= len(text_split):
        print("Вылет")
        break


#Проблема в lst_cmd - не работает, а lst_cmd_write - работает.
    elif text_split[i_txt] in lst_cmd:
        print("win")
        if text_split[i_txt] in lst_cmd_start:
            text_split.remove(text_split[i_txt])
            print("lst_cmd_start")

            i_txt = 0
            while len(text_split):
                if i_txt >= len(text_split):
                    my_file = open(r"C:\Users\berez\OneDrive\Рабочий стол\BabyFile.txt", "w+")
                    my_file.write(" ".join(text_split))
                    my_file.close()
                    print("Записала!")
                    break

                elif text_split[i_txt] in lst_parasites:
                    text_split.remove(text_split[i_txt])
                    print("Паразит удалён")
                    i_txt = 0

                else:
                    i_txt += 1

        elif text_split[i_txt] in lst_cmd_write:
            text_split.remove(text_split[i_txt])
            print("lst_cmd_write")
            i_txt=0
            while len(text_split):
                if i_txt >= len(text_split):
                    my_file = open(r"C:\Users\berez\OneDrive\Рабочий стол\BabyFile.txt", "w+")
                    my_file.write(" ".join(text_split))
                    my_file.close()
                    print("Записала!")
                    break

                elif text_split[i_txt] in lst_parasites:
                    text_split.remove(text_split[i_txt])
                    print("Паразит удалён")
                    i_txt=0

                else:
                    i_txt+=1

        else:
            print("Error")
    else:
        print("Error")
        i_txt+=1


#Можешь записать пожалуйста сделать стол

Ответы (1 шт):

Автор решения: passant

#Проблема в lst_cmd - не работает, а lst_cmd_write - работает. -- проблема не в том, что "не работает". Проблема в том, что вы не понимаете, что делаете вот в этом месте:

lst_cmd = [lst_cmd_start, lst_cmd_write]

Откройте менеджер переменных, и посмотрите, что такое lst_cmd. Вы с удивлением обнаружите, что это список из ДВУХ элементов. Один

lst_cmd[0]
Out[47]: ['открыть', 'открой', 'запустить', 'запусти']

и второй

lst_cmd[1]
Out[48]: ['записать','запиши','напиши','написать','запишешь','запишете','запишите']

А text_split[i_txt] - это ОДНА строка. Ну например 'записать'

Поэтому неудивительно, что

text_split[i_txt] in lst_cmd

будет иметь значение False, в то время как

text_split[i_txt] in lst_cmd_write

будет иметь значение True

Я думаю, правильнее было бы написать

lst_cmd=lst_cmd_start+lst_cmd_write

Попробуйте. Думаю, хотя-бы указанную вами ошибку это должно исправить(про другие ошибки пока не говорю).

→ Ссылка