我没有详细查看您的代码,但是有一种更简单的方法可以编写您正在谈论的函数:
def spaced_word( s ):
return ' '.join( s )
print spaced_word( 'abcde' )
印刷:
a b c d e
编辑:好的,现在我查看了您的代码,看看我是否可以回答您的直接问题,答案是否定的,我不能。那个代码太复杂了。(对不起!)这种代码的复杂性应该让你退后一步,问:“没有更简单的方法吗?”
我这样说是不是很不礼貌?如果是这样,我真诚地道歉。但有时你只需要扔掉你的代码并用更简单的方法重新开始。是的,我从卑微的个人经历中知道这一点,我丢掉了很多自己的代码!
一些危险信号:
在 Python 中,就像在 Ruby 和 JavaScript 以及可能相当多的其他语言中一样,当您需要在其他一些项目之间插入一些东西时,最后没有额外的“东西”,首先要看的是join()
函数或方法。在每种语言中,它接受一个数组并在每个数组元素之间插入一个字符串。这是进行这种操作的好方法。
鉴于此,剩下的唯一事情就是将原始字符串转换为数组(Python 中的列表)。你这样做的方式各不相同。在 Python 中,您可以使用list(string)
- 尽管您甚至不需要这样做,因为 Python 字符串是可迭代的,您可以join
直接对它们执行 a 操作,就像您对 Python 列表执行操作一样。(感谢@Blckknght 指出这一点。)在 Ruby 或 JavaScript 中,这string.split('')
- 有趣的是,这两种语言的语法是相同的。
然后,您只需获取结果并join(' ')
以该语言的适当语法对其进行处理。所有三种语言的代码都非常相似。
红宝石:
def spaced_word( s )
s.split('').join(' ')
end
JavaScript:
function spacedWord( s ) {
return s.split('').join(' ');
}
Python:
def spaced_word( s ):
return ' '.join( s )
或者让它与其他两种语言更相似:
def spaced_word( s ):
return ' '.join( list(s) )
这提出了一个(希望)有趣的观点。我对 Python 代码的第一种方法是使用显式list(s)
. 最近我一直在用 JavaScript、Python 和 Ruby 编写代码,但最近一周左右的时间主要是 JavaScript。所以当我写了一点 Python 代码时,我自然而然地陷入了一种更加 JavaScript 风格的做法:先将字符串转换为数组(列表),然后join
对其进行调用。在 JavaScript 中,您不能join
直接调用字符串。但是在 Python 中你可以!
也许您的代码中发生了类似的事情?仔细逐字符循环编写它的方式是在 C 和其他一些语言中执行它的方式。将编码模式从一种语言转移到另一种语言是一种自然趋势,就像我从 JavaScript 思维方式编写 Python 代码一样。
就我自己而言,我知道我必须不断地与之抗争,并根据我目前正在编码的语言以及它提供的功能进行思考。Python 与 Ruby 和 JavaScript 以及其他类似语言一起,提供了丰富的字符串和数组/列表操作函数,因此在编写您自己的更详细的代码之前,这是可以查看的地方。