5

これを行うための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]
4

9 に答える 9

4
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.rstrip(' ')
于 2012-05-24T21:41:43.840 に答える
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))

これは文字通り分割アルゴリズムを実装します-文字列を手動で単語に分割し、次に単語のリストを逆にします。

于 2012-05-24T22:42:45.743 に答える
0

文字列のインデックスを使用して各文字を取得し、文字列を逆方向に繰り返すループを作成します。Pythonでは、次を使用して文字列にアクセスできることを忘れないでください。

s = "Strings!"
sOne = s[1] // == "t"
于 2012-05-24T21:36:04.813 に答える
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'

要求に応じて1つのライナー(「importre」ビットを除く):

>>> 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'
于 2012-05-24T22:40:50.253 に答える
0

再使用

import re
myStr = "Here is sample text"
print " ".join(re.findall("\S+",myStr)[::-1])
于 2015-12-16T10:51:08.377 に答える
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)
于 2015-12-16T11:16:08.477 に答える
0

reversed一部のインタビューでは、Pythonを使用するときに制約があります。たとえば、、、[::-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)
于 2017-03-07T07:13:29.403 に答える
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")
于 2018-03-07T16:43:45.833 に答える
-3

編集:まあ、str.split許可されていれば、これになります;-)あるいは、もちろん、独自のバージョンの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'

3つのステップがあります:スペースで分割し、単語でリストを反転し、文字列のリストをスペースを挟んで1つの文字列に連結します。

于 2012-05-24T21:35:17.503 に答える