Спасибо, что нашли время, чтобы прочитать это. Я столкнулся с проблемой, когда вызов списка вне функции возвращает пустые значения. Что я хочу сделать, так это посмотреть на документ и, если слова в этом документе также находятся в предопределенном списке (или нет), составить список из единиц (и нулей). Затем я хочу перебрать несколько документов и составить список списков. Я думаю, что приведенный ниже пример кода даст больше контекста тому, чего я пытаюсь достичь.
Вход:
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 списков, но каждый из этих списков пуст.
Спасибо за ваше время и помощь!
@ChristianSloper Я пробовал это, но распечатанный список (вне функции) все равно будет возвращать список пустых списков ...
Я посмотрел на ваш код, и если вы добавите печать сразу после vector.clear (), я думаю, вы увидите, что происходит.
Final_list просто содержит ссылки на вектор, поэтому, когда вы очистите его, он также очистит содержимое в вашем final_list.
изменение
final_list.append(vector)
к
final_list.append(vector.copy())
Теперь это работает. Спасибо, что нашли время, чтобы изучить его подробнее!
вам нужно захватить возврат из функции, например final_list = test_function ()