允许不使用str.split()的字符串的反向字顺序

时间:2012-05-24 21:32:11

标签: python string

这样做的pythonic方式是什么?

从这个:'这是一个尝试'的字符串:'尝试字符串a是这个'

我的第一个猜测是:

for w in 'This is a string to try'.split(' ')[::-1]:
    print w,

但不允许 str.split()。然后我想出了这个:

def reverse_w(txt):
    tmp = []
    while (txt.find(' ') >= 0):
        tmp.append(txt[:txt.find(' ')])
        txt = txt[txt.find(' ')+1:]
    if (txt.find(' ') == -1):
        tmp.append(txt)
   return tmp[::-1]

9 个答案:

答案 0 :(得分:3)

def reverse(sentence):
sentence = 'This is a string to try'
    answer = ''
    temp = ''
    for char in sentence:
        if char != ' ':
            temp += char
        else:
            answer = temp + ' ' + answer
            temp = ''
    answer = temp + ' ' + answer
    return answer

答案 1 :(得分:3)

这是一个O(n)实现(不使用+连接):

def reverse_w(txt):
    words = []
    word = []

    for char in txt:
        if char == ' ':
            words.append(''.join(word))
            word = []
        else:
            word.append(char)
    words.append(''.join(word))

    return ' '.join(reversed(words))

这实际上实现了分割算法 - 手动将字符串拆分为单词,然后反转单词列表。

答案 2 :(得分:0)

创建一个循环,向后遍历字符串,使用字符串索引来获取每个字符。请记住,在Python中,您可以使用以下命令访问字符串:

s = "Strings!"
sOne = s[1] // == "t"

答案 3 :(得分:0)

>>> import re
>>> s = 'This is a string to try'
>>> z = re.split('\W+', s)
>>> z.reverse()
>>> ' '.join(z)
'try to string a is This'

根据要求提供一个班轮('import re'位除外):

>>> reduce(lambda x, y: u'%s %s' % (y, x), re.split('\W+', 'This is a string to try'))
u'try to string a is This'

答案 4 :(得分:0)

使用重新

import re
myStr = "Here is sample text"
print " ".join(re.findall("\S+",myStr)[::-1])

答案 5 :(得分:0)

如果允许string.partition作为替换:

def reversed_words(s):
    out = []
    while s:
        word, _, s = s.partition(' ')
        out.insert(0, word)
    return ' '.join(out)

否则回退string.find:

def reversed_words(s):
    out = []
    while s:
        pos = s.find(' ')
        if pos >= 0:
            word, s = s[:pos], s[pos+1:]
        else:
            word, s = s, ''
        out.insert(0, word)
    return ' '.join(out)

答案 6 :(得分:0)

在某些采访中,您在使用Python时受到限制,例如:请勿使用reversed[::-1].split()

在这些情况下,Python 2.7中的以下代码可以使用(从Darthfett上面的答案中采用):

def revwords(sentence):
    word = []
    words = []

    for char in sentence:
        if char == ' ':
            words.insert(0,''.join(word))
            word = []
        else:
            word.append(char)
    words.insert(0,''.join(word))

    return ' '.join(words)

答案 7 :(得分:0)

最简单的程序,不使用任何内置方法:

def reverse(sentence):
    answer = ''
    temp = ''
    for char in sentence:
        if char != ' ':
            temp += char
            continue
        rev = ''
        for i in range(len(temp)):
            rev += temp[len(temp)-i-1]
        answer += rev + ' '
        temp = ''
    return answer + temp
reverse("This is a string to try")

答案 8 :(得分:-3)

编辑:好吧,如果允许str.split,那就是这个;-)或者,你可以编写自己的分割版本。

>>> s = 'This is a string to try'
>>> r = s.split(' ')
['This', 'is', 'a', 'string', 'to', 'try']
>>> r.reverse()
>>> r
['try', 'to', 'string', 'a', 'is', 'This']
>>> result = ' '.join(r)
>>> result
'try to string a is This'

有三个步骤:按空格分割,用单词反转列表,并将字符串列表连接到一个字符串,中间有空格。