私はJavaとCからPythonを始めたばかりです。どのようにcharをインクリメントできますか? JavaまたはCでは、charsとintは実質的に交換可能であり、特定のループでは、charsをインクリメントし、charsで配列にインデックスを付けることができると非常に便利です。
Pythonでこれを行うにはどうすればよいですか?従来のfor(;;)ルーパーがなければ十分ではありません-戦略全体を再考することなく、達成したいことを達成できる方法はありますか?
任意の助けに感謝します。
Python 2.xでは、ord
およびchr
関数を使用します。
>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>>
Python 3.xは、バイトとユニコードの明確な区別により、これをより組織的で興味深いものにします。デフォルトでは、「文字列」はユニコードであるため、上記は機能します(ord
はUnicode文字を受け取り、chr
はそれらを生成します)。
ただし、バイトに興味がある場合(バイナリデータストリームの処理など)、さらに簡単です。
>>> bstr = b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'
「従来のfor(;;)ルーパーを持たないことは十分に悪い」??何?
しようとしていますか
import string
for c in string.lowercase:
...do something with c...
または、おそらくstring.uppercase
またはstring.letters
を使用していますか?
Pythonにはfor(;;)
がありません。多くの場合、より良い方法があります。また、文字数学も必要ありません。
PHPから来ました。++演算子を使用してcharをインクリメントできます(AからB、ZからAA、AAからABなど)。 Pythonでも同じことをする単純な関数を作成しました。文字のリストを必要に応じて(小文字、大文字など)に変更することもできます。
# Increment char (a -> b, az -> ba)
def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
# Unique and sort
chlist = ''.join(sorted(set(str(chlist))))
chlen = len(chlist)
if not chlen:
return ''
text = str(text)
# Replace all chars but chlist
text = re.sub('[^' + chlist + ']', '', text)
if not len(text):
return chlist[0]
# Increment
inc = ''
over = False
for i in range(1, len(text)+1):
lchar = text[-i]
pos = chlist.find(lchar) + 1
if pos < chlen:
inc = chlist[pos] + inc
over = False
break
else:
inc = chlist[0] + inc
over = True
if over:
inc += chlist[0]
result = text[0:-len(inc)] + inc
return result
def doubleChar(str):
result = ''
for char in str:
result += char * 2
return result
print(doubleChar("amar"))
出力:
aammaarr