web-dev-qa-db-ja.com

Python:charをインクリメントするにはどうすればよいですか?

私はJavaとCからPythonを始めたばかりです。どのようにcharをインクリメントできますか? JavaまたはCでは、charsとintは実質的に交換可能であり、特定のループでは、charsをインクリメントし、charsで配列にインデックスを付けることができると非常に便利です。

Pythonでこれを行うにはどうすればよいですか?従来のfor(;;)ルーパーがなければ十分ではありません-戦略全体を再考することなく、達成したいことを達成できる方法はありますか?

任意の助けに感謝します。

95
Tom R

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'
165
Eli Bendersky

「従来のfor(;;)ルーパーを持たないことは十分に悪い」??何?

しようとしていますか

import string
for c in string.lowercase:
    ...do something with c...

または、おそらくstring.uppercaseまたはstring.lettersを使用していますか?

Pythonにはfor(;;)がありません。多くの場合、より良い方法があります。また、文字数学も必要ありません。

14
S.Lott

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
1
xpuu
def doubleChar(str):
    result = ''
    for char in str:
        result += char * 2
    return result

print(doubleChar("amar"))

出力:

aammaarr
0
Amar Tanwar