2016-05-11 10 views
0
s="I love you" 

どうすれば"I evol uoy"を得ることができますか?python3、文中の単語の各文字を逆にする方法

words=s.split() 
s1=[] 

for x in words: 
    c=list(x) 
    c.reverse() 
    for y in c: 
     s1.append(y) 

s1がある...私は再び試みた

'I' 
'evol' 
'uoy' 

...私は...

words=s.split() 

for x in words: 
    c=list(x) 
    c.reverse() 
    " ".join(c) 

を試してみましたが、私が手:

['I', 'e', 'v', 'o', 'l', 'u', 'o', 'y'] 

しかし、単語の間にスペースはありません。

答えて

4

splitを使用して単語を取得し、それぞれの単語をreverseにしてからjoinとします。ここで

>>> s = "I love you" 
>>> " ".join(word[::-1] for word in s.split()) 
'I evol uoy' 
+1

'_'は変数名としては不適切です。 – vaultah

+0

無視しなければならないとは思えません。 – AKS

+1

はい...しかし、あなたはそれを無視しません。 – vaultah

2

はあなたの最初のソリューションを修正する方法は次のとおりです。

  1. は、単にどこかで助けにはならない、それを使用せずに" ".join(c)を呼び出す:

    s = "I love you" 
    
    words = s.split() 
    
    def reverse_word(x): 
        c = list(x) 
        c.reverse() 
        return "".join(c) 
    
    result = " ".join(reverse_word(w) for w in words) 
    
    print(result) 
    

    修正するために重要なことがあることです。 cxのコピーで、反転するとxは変更されません。

  2. " ".join(c)の間にスペースを入れたくないので間違っているので、今は"".join(c)です。スペースは実際の逆の文に追加されます。

2つ目:

ここでの重要な違いは、あなたがするので、各単語(文字からなる)のためだけでなく、文全体(の単語からなる)のためのリストが必要なことである
s1 = [] 

for x in words: 
    new_word = [] 
    c = list(x) 
    c.reverse() 
    for y in c: 
     new_word.append(y) 
    s1.append("".join(new_word)) 

result = " ".join(s1) 

あなたが見たように、両方のための単一のリストは動作しません。私はそれをあなたのコードに似ていますが、new_wordは実際には冗長です。cのちょうど正確なコピーです。だから、次のように単純化することができます

s1 = [] 

for x in words: 
    c = list(x) 
    c.reverse() 
    s1.append("".join(c)) 

result = " ".join(s1) 

これは非常に一般的なパターンです:、空のリストを作成し、forループの各反復でそれにいくつかの要素を追加した後、最終的な結果を保持します。 Pythonにはリスト内包と呼ばれる特別な構文があります:

def reverse_word(x): 
    c = list(x) 
    c.reverse() 
    return "".join(c) 

s1 = [reverse_word(word) for word in words] 

これはより洗練されたPythonの方法です。実際には、上記のコードの最初の部分がほぼ正確にこれに似ていますが、s1という名前を付けずにすぐに使用しました。そして、これはジェネレータの理解とPythonの構文の素敵な小さな機能なので、角括弧はありませんjoinは1つの引数しか取らないので、かっこだけが有効であることを意味します。しかし今、私たちは深くなっています。あまり心配しないでください。

最後にreverse_word(word)は、Pythonのスライス表記を使用して簡単にword[s::-1]に置き換えることができ、すべてを1ステップで実行することができます。これはAKSの解決策です。

0

文字列を単語に分割し、各単語を逆順にして結合します。

' '.join(i[::-1] for i in s.split()) 
関連する問題