문자를 어떻게 증가시킬 수 있습니까?


103

Java와 C에서 온 Python을 처음 사용합니다. char를 어떻게 증가시킬 수 있습니까? Java 또는 C에서 chars와 int는 실질적으로 상호 교환이 가능하며 특정 루프에서는 증가 문자를 수행하고 문자별로 배열을 색인화 할 수있는 것이 매우 유용합니다.

파이썬에서 어떻게 할 수 있습니까? 전통적인 for (;;) 루 퍼가없는 것은 충분히 나쁩니다. 전체 전략을 재고하지 않고도 내가 원하는 것을 달성 할 수있는 방법이 있습니까?


4
기존 for루프 : for i in range(50): do_something_with(i). 어서, 그렇게 나쁘지 않아 !!
jathanism

@SilentGhost : Android 앱에서 사용하기 위해 영어 사전을 분할하고 있습니다. 파일이 개별적으로 너무 크기 때문에이를 words_aa.txt, words_ab.txt 등으로 분할하는 Python 스크립트를 작성했습니다. ID가 포함 된 배열로 Java 파일을 생성하려면 두 번째 스크립트를 작성해야했습니다. (나는 게으 르기 때문에) 각 단어 파일의 원시 파일 리소스의 일부이며 더 나은 방법을 생각할 수 없었습니다.
Tom R

3
당신은 뭔가를 찾고있는 것 같습니다[''.join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)]
SilentGhost 2010-01-28

1
@SilentGhost : 그게 전부인가요? 매뉴얼에 언급되어 있다면.
Tom R

답변:


179

Python 2.x에서는 ordchr함수를 사용하십시오 .

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

Python 3.x는 바이트와 유니 코드를 명확하게 구분하므로이를 더욱 체계적이고 흥미롭게 만듭니다. 기본적으로 "문자열"은 유니 코드이므로 위의 방법이 작동합니다 ( ord유니 코드 문자를 수신하여 chr생성).

그러나 바이트에 관심이 있다면 (예 : 일부 이진 데이터 스트림 처리) 일이 훨씬 더 간단합니다.

>>> bstr = bytes('abc', 'utf-8')
>>> bstr
b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'

5
@Tom R. 하지마! [옛날 그리워]. 빠르게 무언가를 성취하거나 코드 조각을 변환하려고 할 때 Python의 개념과 관용구는 단순히 진행을 방해하는 것처럼 보일 수 있으며 학습 곡선의 가치가 거의 없습니다. 인내심을 가지십시오! Python에 능숙 해지면 Java (및 C)에서 스타일이 향상된다는 사실을 발견 할 수도 있습니다.
mjv

매력처럼 작동했습니다. <br> 제가 할 수있는 유일한 변경 사항은 z에 대한 것입니다.이 경우 'a'를 할당했습니다.
user45949

15

"전통적인 for (;;) 루 퍼가 없을만큼 나쁘다"?? 뭐?

당신은하려고

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

아니면 또는 사용 string.uppercase하고 string.letters있습니까?

파이썬에는 for(;;)더 나은 방법 이 있기 때문에 그렇지 않습니다 . 또한 필요하지 않기 때문에 문자 수학도 없습니다.


1
질문 뒤에있는 질문 (XY 문제 등)에 답하려는 경우 +1. 할 수만 있다면 더 줄게.
Devin Jeanpierre

감사. 나는 종종 "왜?" 이와 같은 질문에 대해. 그러나 @SilentGhost는 나를 이겼습니다.
S.Lott

3

나는 PHP에서 왔는데 ++ 연산자를 사용하여 char (A에서 B, Z에서 AA, AA에서 AB 등)를 늘릴 수 있습니다. 파이썬에서 똑같이하는 간단한 함수를 만들었습니다. 또한 문자 목록을 원하는대로 (소문자, 대문자 등) 변경할 수 있습니다.

# 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

2

영어 알파벳, 대문자, 소문자가 모두 포함 된 문자열 인 ascii_lettersfrom stringpackage를 사용하여 문자를 늘리는 방법 ascii_letters이 있습니다.

>>> from string import ascii_letters
>>> ascii_letters[ascii_letters.index('a') + 1]
'b'
>>> ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

또한 수동으로 수행 할 수 있습니다.

>>> letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> letters[letters.index('c') + 1]
'd'

1

이것을 확인하십시오 : USING FOR LOOP

for a in range(5): x='A' val=chr(ord(x)+a) print(val)
출력 : ABCBDE


0
def doubleChar(str):
    result = ''
    for char in str:
        result += char * 2
    return result

print(doubleChar("amar"))

산출:

aammaarr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.