Как я могу добавить значение, заменяющее несколько элементов в списке? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать поисковую систему, которая находит ключевое слово для поиска, содержащее несколько AND, OR и круглые скобки. Сейчас я пытаюсь заменить круглые скобки логическими значениями. Поэтому, если у меня есть список ["A", "или", "(", "B", "and", "C", ")"], я хочу изменить этот список на ["A", "или ", Правда].

Сначала я попробовал ключевое слово del, затем добавил логическое значение, как показано ниже. Это работает, это единственный пример. Однако у меня могут быть круглые скобки в начале или середине списка, и в этом случае это не сработает (потому что ключевое слово append всегда добавляет элементы в конец)

Также я пробовал ключевое слово replace, но оно вернуло выходные данные ["A", "or", "T", "r", "u", "e"]

Как я могу заменить ["(", "B", "and", "C", ")"] на True?

sentence = ["B", "C", "D"]
search = ["A", "or", "(", "B", "and", "C", ")"]
if "(" in search:
    start = search.index("(")
    end = search.index(")")
    bracket = search[start + 1 : end]

    if "and" in bracket:
        index_of_and = bracket.index("and")
        if bracket[index_of_and - 1] and bracket[index_of_and + 1] in sentence:
            print("both in")
            bracket = 'True'
        else:
            print("only one or nothing in")
            bracket = 'False'
    elif "or" in bracket:
        index_of_or = bracket.index("or")
        if   bracket[index_of_or -1]  in sentence or  bracket[index_of_or +1]   in sentence:
            bracket = 'True'
        else:
            bracket = 'False'
    else:
        if bracket[0] in sentence:
            bracket = 'True'
        else:
            bracket = 'False'

    del search[start:end+1]
    search = search.append(bool(bracket))

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

ваш код немного сложен для чтения, но я думаю, что его единственная проблема - добавление в конце, так как вы не знаете, что закрывающая скобка - это конец предложения, добавление может изменить вашу логику, вместо этого вы должны вставить и Операция добавления ничего не возвращает, поэтому эта строка:

search = search.append(bool(bracket))

должно быть

search.insert(start - 1, bool(bracket))

Я также не уверен, как вам удалось превратиться в правильное разделение букв, что должно произойти, только если вы сделаете list("true")

0 голосов
/ 16 апреля 2019
del search[start - 1: end + 1]
search.insert(start - 1, bracket)
...