42

入力として文字列を受け取り、それを逆の順序で返す関数を必要とする奇妙な Codecademy 演習に出くわしました。唯一の問題は、逆の方法やスタックオーバーフローに関する一般的な回答を使用できないことでした[::-1]

明らかに、プログラミングの現実の世界では、拡張スライスメソッドを使用したり、関数を使用したりする可能性が最も高いreversedですが、これが機能しない場合があるのではないでしょうか?

将来的に役立つ場合に備えて、以下の解決策を Q&A スタイルで提示します。

4

43 に答える 43

7

Python をコーディングして数日しか経っていませんが、これはかなりクリーンなソリューションだったと感じています。空のリストを作成し、文字列内の各文字をループしてリストの先頭に追加し、結合されたリストを文字列として返します。

def reverse(text):
backwardstext = []
for letter in text:
    backwardstext.insert(0, letter)
return ''.join(backwardstext)
于 2014-07-09T20:38:30.603 に答える
4

これは非常に興味深い質問です。簡単に 1 つのライナーで答えたいと思います。

>>> S='abcdefg'
>>> ''.join(item[1] for item in sorted(enumerate(S), reverse=True))
'gfedcba'

簡単な説明:

enumerate()戻ります[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g')]。インデックスと値。値を逆にするには、 で並べ替えますsorted()。最後に、元に戻すだけです。str

于 2013-09-22T02:30:47.440 に答える
3

レポでPythonで文字列を逆にする方法のさまざまなバージョンを作成しました: https://github.com/fedmich/Python-Codes/tree/master/Reverse%20a%20String

リスト内包表記またはラムダ手法を使用して実行できます。

# Reverse a string without using reverse() function
s = 'Federico';
li = list( s )  #convert string to list

ret = [ li[i-1] for i in xrange(len(li),0,-1)  ]    #1 liner lambda
print ( "".join( ret ) )

または逆方向の for ループを実行することによって

# Reverse a string without using reverse() function
s = 'Federico';
r = []

length = len(s)
for i in xrange(length,0,-1):
    r.append( s[ i - 1] )

print ( "".join(r) )
于 2014-06-02T11:49:05.433 に答える
3
reduce(lambda x, y : y + x, "hello world")
于 2015-06-01T06:26:42.047 に答える
2
def reverse(s):
    return "".join(s[i] for i in range(len(s)-1, -1, -1))
于 2015-03-04T22:00:31.400 に答える
2

コードアカデミーでこれを解決し、回答をチェックしていて、このリストに出くわしました。そのため、Pythonの理解が非常に限られているため、これを実行したところ、動作するようになりました。

def reverse(s):
    i = len(s) - 1
    sNew = ''
    while  i >= 0:
        sNew = sNew + str(s[i])
        i = i -1
    return sNew
于 2014-03-06T23:24:00.877 に答える
2

Blenderの答えは素敵ですが、非常に長い文字列の場合、なんとRuntimeError: maximum recursion depth exceeded. Python で再帰を頻繁に行わなければならないため、同じコードを while ループにリファクタリングすることがあります。明らかに、時間とメモリの問題によりまだ悪いですが、少なくともエラーにはなりません。

def reverse(text):
    answer = ""
    while text:
        answer = text[0] + answer
        text = text[1:]
    return answer
于 2015-06-17T22:49:53.340 に答える
1

最後の文字から文字列を単純に逆に繰り返すことができます。Python では、リスト内包表記を使用して文字のリストを逆の順序で作成し、それらを結合して逆の文字列をワンライナーで取得できます。

def reverse(s):
  return "".join([s[-i-1] for i in xrange(len(s))])

負のインデックスを使用することさえ許可されていない場合は、次のものに置き換える必要がありs[-i-1]ますs[len(s)-i-1]

于 2014-07-07T21:18:07.757 に答える
1

今日、私はペンと紙でこの同じ演習を求められたので、リスト用に次の関数を考え出しました:

def rev(s):
  l = len(s)
  for i,j in zip(range(l-1, 0, -1), range(l//2)):
    s[i], s[j] = s[j], s[i]
  return s

文字列で使用できます"".join(rev(list("hello")))

于 2013-11-23T01:21:04.323 に答える
1

これは、for i in range ループを使用した私のソリューションです。

def reverse(string):
    tmp = ""
    for i in range(1,len(string)+1):
        tmp += string[len(string)-i]            
    return tmp

理解するのはとても簡単です。範囲外のインデックスを避けるために、1 から始めます。

于 2015-01-05T13:17:16.303 に答える
1

ここに私の貢献があります:

def rev(test):  
    test = list(test)
    i = len(test)-1
    result = []

    print test
    while i >= 0:
        result.append(test.pop(i))
        i -= 1
    return "".join(result)
于 2015-01-17T00:22:49.297 に答える
1

このように簡単に行うことができます

def rev(str):
   rev = ""
   for i in range(0,len(str)):
   rev = rev + str[(len(str)-1)-i]
   return rev
于 2015-01-06T12:53:15.407 に答える
1
def reverseThatString(theString):
    reversedString = ""
    lenOfString = len(theString)
    for i,j in enumerate(theString):
        lenOfString -= 1
        reversedString += theString[lenOfString]
    return reversedString
于 2014-11-27T10:28:57.323 に答える
1

逆文字列を実現するために私がしたことはxrange、for ループで文字列の長さを指定して関数を使用し、次のように戻ることだけです。

myString = "ABC"

for index in xrange(len(myString),-1):
    print index

私の出力は「CBA」です

于 2014-06-21T14:56:36.017 に答える
0

あまり賢いわけではありませんが、トリッキーな解決策

def reverse(t):
    for j in range(len(t) // 2):
        t = t[:j] + t[- j - 1] + t[j + 1:- j - 1] + t[j] + t[len(t) - j:]
    return t
于 2014-07-07T21:06:08.650 に答える
0

あなたは十分な答えを得ました。

別の方法を共有したいだけです。

逆方向の 2 つの小さな関数を記述し、関数の出力を指定された文字列と比較できます。

変数 = ''

デフリバース(データ):

for i in data:
    var = i + var
return var

var == data でない場合:

print "回文なし"

そうしないと :

「パリンドローム」を印刷する

于 2013-11-28T06:53:24.313 に答える
0

私の解決策:

s = raw_input("文字列を入力してください")
print
def reverse(テキスト):

st = ""  
rev = ""  
count = len(text)  
print "Lenght of text: ", len(text)  
print  
for c in range(len(text)):  
    count = count - 1  
    st = st + "".join(text[c])  
    rev = rev + "".join(text[count])  
    print "count:       ", count  
    print "print c:     ", c  
    print "text[c]:     ", text[c]  
    print  
print "Original:    ", st  
print "Reversed:    ", rev  
return rev  

リバース

結果画面

文字列 joca を入力してください

テキストの長さ: 4

count: 3
print c: 0
text[c]: j

count: 2
print c: 1
text[c]: o

count: 1
print c: 2
text[c]: c

count: 0
print c: 3
text[c]: a

原:joca 裏返し
:acoj
なし

于 2014-11-26T00:36:20.990 に答える
0
enterString=input("Enter a string to be reversed:")
string_List=list(enterString)
revedString=[]

for i in range(len(string_List)):
    revedString.append(string_List.pop())
#Pop last element and append it to the empty list
print "reversed string is:",''.join(revedString)
#as the out come is in list convert it into string using .join

Sample Output:
>>>Enter a string to be reversed :sampleReverse1  
>>>reversed string is:1esreveRelpmas 
于 2016-06-03T10:38:44.207 に答える
0

これは、Python 2.7 構文で最も簡単な方法です。

def reverse(text):

      rev = ""
      final = ""

      for a in range(0,len(text)):
            rev = text[len(text)-a-1]
            final = final + rev
return final
于 2015-06-17T22:37:47.337 に答える
0

thecrazyprogrammer.com から python で文字列を逆にする例があります。

string1 =  "IkNoWwHeReYoUlIvE"
string2 = ""

i = len(string1)-1

while(i>=0):
  string2 = string2 + string1[i]
  i = i-1

print("original = " + string1)
print("reverse  = " + string2)
于 2019-12-29T16:56:08.017 に答える
-3
__author__ = 'Sreedhar'
#find reverse of the string with out using index or reverse function?

def reverse(text):
    revs = ""
    for i in text:
        revs = i + revs
    return revs

strig = raw_input("enter anything:")

print reverse(strig)

#index method
print strig[::-1]
于 2016-08-30T02:02:43.073 に答える
-8

文字列を逆にする最も簡単な方法:

    backwards = input("Enter string to reverse: ")
    print(backwards[::-1])
于 2015-12-10T03:54:30.860 に答える