入力として文字列を受け取り、それを逆の順序で返す関数を必要とする奇妙な Codecademy 演習に出くわしました。唯一の問題は、逆の方法やスタックオーバーフローに関する一般的な回答を使用できないことでした[::-1]
。
明らかに、プログラミングの現実の世界では、拡張スライスメソッドを使用したり、関数を使用したりする可能性が最も高いreversed
ですが、これが機能しない場合があるのではないでしょうか?
将来的に役立つ場合に備えて、以下の解決策を Q&A スタイルで提示します。
Python をコーディングして数日しか経っていませんが、これはかなりクリーンなソリューションだったと感じています。空のリストを作成し、文字列内の各文字をループしてリストの先頭に追加し、結合されたリストを文字列として返します。
def reverse(text):
backwardstext = []
for letter in text:
backwardstext.insert(0, letter)
return ''.join(backwardstext)
これは非常に興味深い質問です。簡単に 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
レポで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 ) )
# 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) )
reduce(lambda x, y : y + x, "hello world")
def reverse(s):
return "".join(s[i] for i in range(len(s)-1, -1, -1))
コードアカデミーでこれを解決し、回答をチェックしていて、このリストに出くわしました。そのため、Pythonの理解が非常に限られているため、これを実行したところ、動作するようになりました。
def reverse(s):
i = len(s) - 1
sNew = ''
while i >= 0:
sNew = sNew + str(s[i])
i = i -1
return sNew
Blenderの答えは素敵ですが、非常に長い文字列の場合、なんとRuntimeError: maximum recursion depth exceeded
. Python で再帰を頻繁に行わなければならないため、同じコードを while ループにリファクタリングすることがあります。明らかに、時間とメモリの問題によりまだ悪いですが、少なくともエラーにはなりません。
def reverse(text):
answer = ""
while text:
answer = text[0] + answer
text = text[1:]
return answer
最後の文字から文字列を単純に逆に繰り返すことができます。Python では、リスト内包表記を使用して文字のリストを逆の順序で作成し、それらを結合して逆の文字列をワンライナーで取得できます。
def reverse(s):
return "".join([s[-i-1] for i in xrange(len(s))])
負のインデックスを使用することさえ許可されていない場合は、次のものに置き換える必要がありs[-i-1]
ますs[len(s)-i-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")))
これは、for i in range ループを使用した私のソリューションです。
def reverse(string):
tmp = ""
for i in range(1,len(string)+1):
tmp += string[len(string)-i]
return tmp
理解するのはとても簡単です。範囲外のインデックスを避けるために、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)
このように簡単に行うことができます
def rev(str):
rev = ""
for i in range(0,len(str)):
rev = rev + str[(len(str)-1)-i]
return rev
def reverseThatString(theString):
reversedString = ""
lenOfString = len(theString)
for i,j in enumerate(theString):
lenOfString -= 1
reversedString += theString[lenOfString]
return reversedString
逆文字列を実現するために私がしたことはxrange
、for ループで文字列の長さを指定して関数を使用し、次のように戻ることだけです。
myString = "ABC"
for index in xrange(len(myString),-1):
print index
私の出力は「CBA」です
あまり賢いわけではありませんが、トリッキーな解決策
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
あなたは十分な答えを得ました。
別の方法を共有したいだけです。
逆方向の 2 つの小さな関数を記述し、関数の出力を指定された文字列と比較できます。
変数 = ''
デフリバース(データ):
for i in data:
var = i + var
return var
var == data でない場合:
print "回文なし"
そうしないと :
「パリンドローム」を印刷する
私の解決策:
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
なし
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
def reverse(text):
rev = ""
final = ""
for a in range(0,len(text)):
rev = text[len(text)-a-1]
final = final + rev
return final
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)
__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]
文字列を逆にする最も簡単な方法:
backwards = input("Enter string to reverse: ")
print(backwards[::-1])