首页 > 解决方案 > 函数返回相同的列表两次

问题描述

新考试后更新 我在下面创建了一个函数,它接收一个字符串列表,其中的字符串是句子,每个句子都有不同数量的单词。然后我尝试使用 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)

标签: pythonlist

解决方案


您得到的重复项是因为您试图用两个不同的字符将同一行拆分两次。

例如,考虑以下行:

我正在尝试学习python。我真的吗?这是我要测试的句子。

如果我们将此行传递给您的 for 循环,它将按如下方式拆分此行:

首先在 . (点)

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. 我在发布时假设它是错字。


推荐阅读