1

文字列の「グループ」(リストではない)を逆にする方法は? たとえば、「グループ」のサイズが 3 の場合、「123456789」を「321654987」に変換したいと思います。

以下は私のコードですが、空の文字列を出力することが判明しました:

string = "12345678901234567890"
new_string = ""
for i in range(0, len(string), 5):
    new_string = new_string + string[i:i+5:-1]
print (new_string)

ご意見やアドバイスをありがとうございます。

4

3 に答える 3

2

負のステップを使用する場合は、開始値と終了値も入れ替えます。

new_string += string[i + 4:i - 1 if i else None:-1]

end 値は除外され、最初の文字Noneを含めるために使用する必要があることに注意してください (再び末尾からスライスされるため、空になります)。-1string[4:-1:-1]

デモ:

>>> string = "12345678901234567890"
>>> new_string = ""
>>> for i in range(0, len(string), 5):
...     new_string = new_string + string[i + 4:i - 1 if i else None:-1]
... 
>>> new_string
'54321098765432109876'

ただし、最初にスライスしてから反転し、そのようなスライスの頭痛の種を自分で節約する方が簡単な場合があります。

new_string += string[i:i + 4][::-1]
于 2013-07-31T19:26:20.757 に答える
1

あなたの問題に対する単純なライナーは次のようになります。

>>> from itertools import chain
>>> testString = "123456789"
>>> group = 3
>>> "".join(chain.from_iterable([reversed(elem) for elem in zip(*[iter(testString)]*group)]))
'321654987'

別の例 ->

>>> testString = "12345678901234567890"
>>> group = 5
>>> "".join(chain.from_iterable([reversed(elem) for elem in zip(*[iter(testString)]*group)]))
'54321098765432109876'
于 2013-07-31T19:33:08.887 に答える
1

これは 1 行で実行できます。

newline = ''.join([string[i:i+n:1][::-1] for i in range(0, len(string), n)])

n は「グループ」のサイズです。あなたの場合、それは 3 になります。説明は以下のとおりです。

i in range(0, len(string), n)3で数える責任があります

string[i+i+n:1]各チャンクを取得する責任があります

[::-1]各チャンクを反転します

''.join()反転された各チャンクを 1 つの文字列に結合します。

別のオプションは次のとおりです。

''.join([string[i+n-1:i-1 if i else None:-1] for i in range(0, len(string), n)])

選択と反転が 1 つのステップで行われる場所。

于 2013-07-31T19:33:15.780 に答える