はあなたの最初のソリューションを修正する方法は次のとおりです。
- は、単にどこかで助けにはならない、それを使用せずに
" ".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)
修正するために重要なことがあることです。 c
はx
のコピーで、反転するとx
は変更されません。
" ".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の解決策です。
'_'は変数名としては不適切です。 – vaultah
無視しなければならないとは思えません。 – AKS
はい...しかし、あなたはそれを無視しません。 – vaultah