我需要取一行文字(单词)并在行的中点后面的第一个空格处将其分成两半; e.g:
The quick brown fox jumps over the lazy dog.
^
上面一行的中点位于第22位,该行在“跳跃”一词后面的空格处分开。
如果您能查看以下代码并告诉我它是否是 Pythonic ,我将不胜感激。如果没有,请建议正确的方法。谢谢。 (PS:我来自C ++背景。)
midLine = len(line) / 2 # Locate mid-point of line.
foundSpace = False
# Traverse the second half of the line and look for a space.
for ii in range(midLine):
if line[midLine + ii] == ' ': # Found a space.
foundSpace = True
break
if (foundSpace == True):
linePart1 = line[:midLine + ii] # Start of line to location of space - 1.
linePart2 = line[midLine + ii + 1:] # Location of space + 1 to end of line.
答案 0 :(得分:7)
Pythonic是在可用的地方使用内置函数。 string.index
在这里完成工作。
def half(s):
idx = s.index(' ', len(s) / 2)
return s[:idx], s[idx+1:]
如果没有合适的地方来破坏字符串,这将引发ValueError。如果这不是你想要的,你可能需要调整代码。
答案 1 :(得分:1)
我认为这更清楚
midLine = len(line) / 2
part1 = line[:midLine]
part2 = line[midLine:]
left, right = part2.split(' ', 1)
linePart1 = part1+left
linePart2 = right
答案 2 :(得分:1)
我不确定pythonic方式,但您可以使用一些提示:
您可以将该行拆分为一半,然后搜索:
the2ndPart = line[len(line) / 2 :]
您不必使用for
:
firstSpace = the2ndPart.find("")
也无需在if语句中使用()
进行真/假使用is
:
if foundSpace is True:
* @ user7610评论你可以使用:
if foundSpace:
只是为了好玩,这里的灵魂是一线:
myString = "The quick brown fox jumps over the lazy dog."
halfWay = len(myString) / 2
print myString[myString[halfWay:].find(" ") + halfWay :]
输出:
over the lazy dog.
我能给你的最好的“pythonic”提示是:“pythonic”方式是好的,直到它不可读,有时简单更好。