【问题标题】:Way to split a string in Python without using the .split function [duplicate]在不使用 .split 函数的情况下在 Python 中拆分字符串的方法 [重复]
【发布时间】:2017-01-07 20:37:27
【问题描述】:

这是我的代码:

words = firstsentence.split(' ')

firstsentence 是用户输入。变量 'words' 存储用户输入的逐字分隔形式。

例如,如果firstsentence 是“我喜欢编码”,.split 会将其保存为变量words 中的分隔单词列表。

我想知道的是,有没有什么方法可以完全按照 .split 所做的那样做,但又不涉及像 .split 这样的任何内置 python 函数?

它必须将单词分开,然后将分开的单词存储在一个变量中。

【问题讨论】:

  • 必须是作业(家庭作业)。否则为什么 OP 会重新发明轮子?还有什么“禁忌”?级联?循环?顺便说一句,您的标题说:“使用 .split 函数在 Python 中拆分字符串的方法”恰恰相反。请关心您的要求。
  • @Jean-FrançoisFabre - 这是一项任务,但我不是因为你的想法才问它的。我认为如果我显示一种拆分字符串的方式,而不使用内置函数,我会得到更多的分数,顺便说一句,这只是我正在制作的程序的一小部分,还有更多,所以不要认为我的任务取决于这个或任何事情。 :-) (不是粗鲁,真的希望你得到我问的问题),谢谢现在才注意到
  • @StreetSoldier 相信我,你会因为避免这样的内置而得到较低的分数。
  • @StreetSoldier 除非你的老师禁止你使用它,否则你应该使用它。时期。查看试图通过无数行代码或正则表达式解决此问题的答案。您可以使用split 进行分配,并展示一种手动完成的方法。这样会更好。
  • @UrielEli@Jean 谢谢大家的建议

标签: python string split


【解决方案1】:
words = []
current_word = ""
for char in firstsentence:
    if char == " ":
        words.append(current_word)
        current_word = ""
    else:
        current_word += char

words.append(current_word)

这会迭代所有字符,如果当前字符是普通字符,则将其附加到current_word。但是,如果当前字符是空格,它会将单词附加到 words 列表并重置临时单词。

编辑:我通过添加最后一行来修复示例,感谢 Tomerikoo。

【讨论】:

  • 不反对:它回答了这个问题。但是不要在家里这样做:附加到字符串的性能不佳(即使在+= 的位置上也是如此)。您可以创建一个字符列表,并使用str.join,但是哦,如果您不能使用str.split,那么您就不能使用str.join :)
  • @Jean-FrançoisFabre 表现不佳是什么意思?那么,如果允许我使用 str.join(我可以使用我想要的任何东西),那么代码会是什么样子
  • 如果你被允许使用join 你被允许使用split :) 这更像是对回答者的评论。我的意思是在将字符串附加到字符串时速度是平庸的。这就是为什么使用join(除其他外),并带有一个空的连接字符串。您可以使用它从字符列表中重新创建字符串。
  • @Jean-FrançoisFabre 感谢您的解释
  • 这会漏掉最后一个单词(假设字符串不以空格结尾)...需要在循环后添加另一个words.append(current_word)
【解决方案2】:

很难知道什么是 OP 中的内置函数,但这里有一个使用切片的解决方案:

start = 0
words = []
for ix, x in enumerate(firstsentence):
    if x == ' ':
        words.append(firstsentence[start:ix])
        start = ix + 1
if start < len(firstsentence):
    words.append(firstsentence[start:])

【讨论】:

    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多