Функция, возвращающая один и тот же список дважды - PullRequest
0 голосов
/ 26 мая 2020

ОБНОВЛЕНО ПОСЛЕ FRE SH ИССЛЕДОВАНИЕ Ниже я создал функцию, которая принимает список строк, где строки представляют собой предложения, каждое из которых содержит различное количество слов. Затем я пытаюсь разбить эти строки на отдельные слова, используя item.split (), создавая новый список со словами, а не предложениями. Затем я пытаюсь распечатать длину нового списка.

Я передаю список с именем split_list, который определяется вне этой функции и представляет собой список строк (список предложений).

Вот как я создаю split_list на основе файла .txt, который представляет собой одну длинную строку в исходной форме.

file = open("classic_cars.txt", "r")
split_list = []
for line in file:
    new_list = line.split(".")
    ultra_list = line.split("?")
    split_list.extend(new_list)
    split_list.extend(ultra_list)
#print(split_list)

Проблема: я вручную подсчитал количество слов мой текстовый файл, и он показывает 957 слов. Однако, когда я печатаю длину моего возвращенного / вновь созданного списка, он отображается как 1917. Когда я печатаю new_list на консоль, он распечатывает его дважды. Почему он это делает?

def create_list_with_words(list):
  new_list = []
  for item in list:
     words = item.split()
     for word in words:
         new_list.append(word)
  print(new_list)
  print(len(new_list))

create_list_of_words(split_list)

1 Ответ

0 голосов
/ 26 мая 2020

Дубликаты, которые вы получаете, вызваны тем, что вы пытаетесь разделить одну и ту же строку дважды двумя разными символами.

Например, рассмотрим следующую строку:

Я пытаюсь узнать python. Я правда? Это предложение, которое я буду тестировать.

Если мы передадим эту строку вам для l oop, она разделит эту строку следующим образом:

Первый на. (точка)

new_list = ['I am trying to learn python', ' Am I really? This is the sentence I will test', '']

Второе включение? (Знак вопроса)

ultra_list = ['I am trying to learn python. Am I really', ' This is the sentence I will test.']

Вы расширяете эти два списка до split_list следующим образом:


split_list.extend(new_list)
split_list.extend(ultra_list)

Таким образом, окончательный split_list будет:


split_list = ['I am trying to learn python', ' Am I really? This is the sentence I will test', '', 'I am trying to learn python. Am I really', ' This is the sentence I will test.']

Этот список вы передаете своей функции create_list_with_words, которая проходит через каждый элемент split_list и разделяет каждый элемент на пробел. Итак, неправильный счет.

Ниже приведен исправленный код:


def create_list_with_words(list):
  new_list = []
  for item in list:
     words = item.split()
     for word in words:
         new_list.append(word)
  print(new_list)
  print(len(new_list))

file = open("classic_cars.txt", "r")
split_list = []
for line in file:
    line = line.replace("?", '')
    new_list = line.split(".")
    split_list.extend(new_list)

create_list_with_words(split_list)

Возможно, вам придется внести дополнительные изменения в этот код в зависимости от ваших потребностей.

ПРИМЕЧАНИЕ: Имя вашей функции create_list_with_words, но вызов задан как create_list_of_words. Я предполагаю, что это опечатка при публикации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...