Python 不使用split()拆分文本时出现问题

Python 不使用split()拆分文本时出现问题,python,string,split,Python,String,Split,拆分文本(text),其中文本是字符串,并通过拆分字符串文本返回单词列表。 见下例: sampleText=“作为Python的创建者,我想谈谈它的起源。” 拆分文本(sampleText) ['As'、'Python'、's'、'creator'、'I'、'd'、'like'、'to'、'say'、'a'、'minute'、'words'、'about'、'its'、'origins'] 您不能使用str类型中的方法split(),但是允许使用该类中的其他方法>。您不能使用诸如string.p

拆分文本(text),其中文本是字符串,并通过拆分字符串文本返回单词列表。 见下例:

sampleText=“作为Python的创建者,我想谈谈它的起源。”

拆分文本(sampleText)

['As'、'Python'、's'、'creator'、'I'、'd'、'like'、'to'、'say'、'a'、'minute'、'words'、'about'、'its'、'origins']

您不能使用str类型中的方法split(),但是允许使用该类中的其他方法>。您不能使用诸如string.py之类的python库

这是我的代码:

def split(text):
    final_lst = ""
    length = len(text)
    for x in range(length):
        if text[x].isalpha() == True:
            final_lst = final_lst + text[x]
        else:
            final_lst = final_lst + ", "

    final_len = len(final_lst)
    for a in range(final_len):
        if final_lst[:a] == " " or final_lst[:a] == "":
            final_lst = "'" + final_lst[a]
        if final_lst[a:] == " " or final_lst[a:] == ", ":
            final_lst = final_lst[a] + "'"
        elif final_lst[:a].isalpha() or final_lst[a:].isalpha():
            final_lst[a]


    print(final_lst)

split(sampleText)
当我运行它时,我得到以下信息:

”“是的


我已经尝试了很多事情来尝试和解决。

对我来说,看起来事情太复杂了,基本上你需要做的就是逐个字符地检查文本,并将它们组合到单词中,一旦你找到空的空间,你就将其分离并添加到结果数组中。文本用完后,你只需返回数组

def splittext(text):
   result = []
   word = ""
   for i in text:
       if i != " ":
           word += i
       else:
           result.append(word)
           word = ""
   result.append(word)
   return result

对我来说,看起来事情太复杂了,基本上你需要做的就是逐个字符地检查文本,并将它们组合成单词,一旦你找到空的空间,你就把它分开并添加到结果数组中。文本用完后,你只需返回数组

def splittext(text):
   result = []
   word = ""
   for i in text:
       if i != " ":
           word += i
       else:
           result.append(word)
           word = ""
   result.append(word)
   return result
这应该起作用:

smapleText='作为Python的创建者,我想说几句关于它的起源的话

def split(text):
   result =[]
   temp=""
   length = len(text)
   for x in range(length):
      if text[x].isalpha():
         temp = temp+text[x]
      else:
         result.append(temp)
         temp=""

      print result

split(smapleText)
这应该起作用:

smapleText='作为Python的创建者,我想说几句关于它的起源的话

def split(text):
   result =[]
   temp=""
   length = len(text)
   for x in range(length):
      if text[x].isalpha():
         temp = temp+text[x]
      else:
         result.append(temp)
         temp=""

      print result

split(smapleText)

首先,你的函数名是错误的。你有
split(text)
,而这个练习特别要求
splitText(text)
。如果你的类是自动评分的,例如由一个程序加载你的代码并试图运行
splitText()
,你就会失败

接下来,这将是您了解字符串在Python中是一个iterable对象的好时机。您不必使用索引,只需直接遍历字符即可

for ch in text:
接下来,正如@Evert所指出的,您正试图构建一个列表,而不是一个字符串

final_list = []
接下来,让我们考虑如何一次处理一个字符并完成此操作。当您看到一个字符时,您可以确定它是否是字母字符。您还需要一条信息:您以前在做什么

  • 如果你在一个“单词”中,并且你得到了“更多单词”,你可以把它加上去

  • 如果你在一个“单词”中,而你得到的是“一个单词都没有”,那么你已经到了单词的末尾,应该把它添加到你的列表中

  • 如果你在“一句话也不说”,而你得到了“一句话也不说”,你可以忽略它

  • 如果你在“一个字也没有”,你得到了“字”,那就是一个新单词的开始

现在,你如何判断你是否在一个单词中?简单。保留一个单词变量

def splitText(text):
    """Split text on any non-alphabetic character, return list of words."""
    final_list = []
    word = ''

    for ch in text:
        if word:   # Empty string is false!
            if ch.isalpha():
                word += ch
            else:
                final_list.append(word)
                word = ''
        else:
            if ch.isalpha():
                word += ch
            else:
                # still not alpha. 
                pass

    # Handle end-of-text with word still going
    if word:
        final_list.append(word)

    return final_list

sampleText = "As Python's creator, I'd like to say a few words about its origins."
print(splitText(sampleText))
输出为:

['As'、'Python'、's'、'creator'、'I'、'd'、'like'、'to'、'say'、'a'、'minute'、'words'、'about'、'its'、'origins']


接下来,如果你坐下来盯着它看一会儿,你就会意识到你可以把一些情况结合起来。它可以很好地归结起来——试着把外部if移到内部,把它翻过来,看看你得到了什么。

首先,你的函数名错了。你有
split(text)
这个练习特别要求
splitText(text)
。如果您的课程是自动评分的,例如由一个程序加载您的代码并尝试运行
splitText()
,您将失败

接下来,这将是您了解字符串在Python中是一个iterable对象的好时机。您不必使用索引,只需直接遍历字符即可

for ch in text:
接下来,正如@Evert所指出的,您正试图构建一个列表,而不是一个字符串

final_list = []
接下来,让我们考虑如何一次处理一个字符并完成此操作。当您看到一个字符时,您可以确定它是否是字母字符。您还需要一条信息:您以前在做什么

  • 如果你在一个“单词”中,并且你得到了“更多单词”,你可以把它加上去

  • 如果你在一个“单词”中,而你得到的是“一个单词都没有”,那么你已经到了单词的末尾,应该把它添加到你的列表中

  • 如果你在“一句话也不说”,而你得到了“一句话也不说”,你可以忽略它

  • 如果你在“一个字也没有”,你得到了“字”,那就是一个新单词的开始

现在,你如何判断你是否在一个单词中?简单。保留一个单词变量

def splitText(text):
    """Split text on any non-alphabetic character, return list of words."""
    final_list = []
    word = ''

    for ch in text:
        if word:   # Empty string is false!
            if ch.isalpha():
                word += ch
            else:
                final_list.append(word)
                word = ''
        else:
            if ch.isalpha():
                word += ch
            else:
                # still not alpha. 
                pass

    # Handle end-of-text with word still going
    if word:
        final_list.append(word)

    return final_list

sampleText = "As Python's creator, I'd like to say a few words about its origins."
print(splitText(sampleText))
输出为:

['As'、'Python'、's'、'creator'、'I'、'd'、'like'、'to'、'say'、'a'、'minute'、'words'、'about'、'its'、'origins']


接下来,如果你坐下来盯着它看一会儿,你就会意识到你可以将一些情况结合起来。它可以很好地归结为——试着通过将外部if移到内部来将其翻转过来,看看你得到了什么。

你能用正则表达式作弊吗

import re
sampleText = "As Python's creator, I'd like to say a few words about its origins."
result = re.findall(r'\w+', sampleText)

>>> result
['As', 'Python', 's', 'creator', 'I', 'd', 'like', 'to', 'say', 'a', 'few', 'words', 'about', 'its', 'origins']

你能用正则表达式作弊吗

import re
sampleText = "As Python's creator, I'd like to say a few words about its origins."
result = re.findall(r'\w+', sampleText)

>>> result
['As', 'Python', 's', 'creator', 'I', 'd', 'like', 'to', 'say', 'a', 'few', 'words', 'about', 'its', 'origins']

这个练习不太清楚字符串要拆分哪些字符(显然,不是在“.”上),而且看起来相邻的拆分字符不需要拆分(逗号空格序列不会引入空字符串)。@Evert你不是说“将final_lst=[]设为空列表吗“?@whitebeard:正确,键盘滑了。因为我在编辑宽限期之外,所以重新添加正确的注释。你这样做是错误的:你必须建立一个列表,而不是一个新的字符串,使用
”,“
作为分隔符。给出的示例结果就是该列表的字符串表示形式。Make
final\u lst=[]
一个空列表,然后将每个子字符串附加到该列表中。不要使用分隔符字符串,如
“,”
等。对于子字符串,只需在输入字符串中的当前位置上循环,直到
isalpha