这个文本处理代码是Pythonic吗?

时间:2014-01-12 15:43:52

标签: python text

我需要取一行文字(单词)并在行的中点后面的第一个空格处将其分成两半; 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.

3 个答案:

答案 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”方式是好的,直到它不可读,有时简单更好。