Как найти элемент в списке если он находиться в другом списке?
Здрасьте, пишу помощницу.
Пример: Есть элемент списка «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 шт):
#Проблема в 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
Попробуйте. Думаю, хотя-бы указанную вами ошибку это должно исправить(про другие ошибки пока не говорю).