Python: добавление в список в функции не возвращает значений, когда список вызывается вне функции - PullRequest
0 голосов
/ 27 октября 2018

Спасибо, что нашли время, чтобы прочитать это. Я сталкиваюсь с проблемой, когда вызов списка вне функции возвращает пустые значения. То, что я хочу сделать, это посмотреть на документ и, если слова в этом документе также находятся в предопределенном списке (или нет), составить список из 1 (и 0). Далее я хочу перебрать несколько документов и составить список списков. Я думаю, что приведенный ниже пример в коде даст больше контекста к тому, чего я пытаюсь достичь.

Введите:

import nltk
company_list = ["This is a company that does excavation",
                "Last financial quarter was bad ",
                "This year we are going be exceed the projected returns."]

middle_list = []
vector = []
final_list = []
bag = ["year", "excavation", "quarter", "returns"]


def test_function():
    counter = 0
    for company in company_list:
        tokenize = nltk.word_tokenize(company)
        # eliminate the duplicates
        tokenize = set(tokenize)
        # make all the words lower case
        for word in tokenize:
            word = word.lower()
            middle_list.append(word)
        for word in bag:
            if word in middle_list:
                x = 1
            else:
                x = 0
            vector.append(x)
        # clear the middle list so that a new company's words can be put inside an empty list
        middle_list.clear()
        counter += 1
        print("Vector values: At", counter, vector)
        final_list.append(vector)
        print("List values: At", counter, final_list)
        # clear the vector so that for each company it starts with an empty list
        vector.clear()
    return final_list


test_function()
print("list outside function: ", final_list)

Выход:

Vector values: At 1 [0, 1, 0, 0]
List values: At 1 [[0, 1, 0, 0]]
Vector values: At 2 [0, 0, 1, 0]
List values: At 2 [[0, 0, 1, 0], [0, 0, 1, 0]]
Vector values: At 3 [1, 0, 0, 1]
List values: At 3 [[1, 0, 0, 1], [1, 0, 0, 1], [1, 0, 0, 1]]
list outside function:  [[], [], []]

Ожидаемый результат: [0, 1, 0, 0], [0, 0, 1, 0], [1, 0, 0, 1]

Как видите, есть 2 проблемы:

1) Когда я печатаю список внутри функции, он возвращает список векторов, но векторы являются дубликатами (которые я не хочу) 2) Когда я хочу напечатать список вне функции, он возвращает список из 3 списков, но каждый из этих списков пуст.

Спасибо за ваше время и помощь!

1 Ответ

0 голосов
/ 27 октября 2018

Я посмотрел ваш код, и если вы добавите печать сразу после vector.clear (), я думаю, вы увидите, что происходит.

Final_list просто содержит ссылки на вектор, поэтому, когда вы очистите это,также очистит содержимое в вашем final_list.

изменить

final_list.append(vector)

на

final_list.append(vector.copy())
...