Python: Как я могу увеличить символ?

Я новичок в Python, пришел с Java и C. Как я могу увеличить символ? В Java или C символы и целые числа практически взаимозаменяемы, и в некоторых циклах мне очень полезно иметь возможность увеличивать символы и индексировать массивы по символам.

Как я могу сделать это в Python? Достаточно плохо, когда нет традиционного для (;;) лупера - могу ли я достичь того, чего хочу, не переосмысливая всю стратегию?

Любая помощь приветствуется.

вопрос задан 28.01.2010
Tom R
3054 репутация

3 ответов


  • 149 рейтинг

    В Python 2. х, просто используйте функции ord и chr:

    >>> ord('c')
    99
    >>> ord('c') + 1
    100
    >>> chr(ord('c') + 1)
    'd'
    >>> 
    

    Python 3. x делает это более организованным и интересным из-за его четкого различия между байтами и юникодом. По умолчанию в качестве «строки» используется Unicode, поэтому вышеприведенное работает (ord получает символы Unicode, а chr - их)

    Но если вам интересны байты (например, для обработки некоторого потока двоичных данных), все еще проще:

    >>> bstr = b'abc'
    >>> bstr[0]
    97
    >>> bytes([97, 98, 99])
    b'abc'
    >>> bytes([bstr[0] + 1, 98, 99])
    b'bbc'
    
    ответ дан Eli Bendersky, с репутацией 158507, 28.01.2010
  • 13 рейтинг

    "достаточно плохо, не имея традиционного для (;;) петлителя"? ? Какие?

    Вы пытаетесь сделать

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

    Или, возможно, вы используете string.uppercase или string.letters?

    У Python нет for(;;), потому что часто есть лучшие способы сделать это. У него также нет математики, потому что в этом нет необходимости.

    ответ дан S.Lott, с репутацией 309793, 28.01.2010
  • 0 рейтинг

    Я пришел из 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
    
    ответ дан xpuu, с репутацией 88, 7.05.2017