용어에서 문자 범위
문자 범위를 지정하는 방법이 있습니까? 이 같은.
for c in xrange( 'a', 'z' ):
print c
여러분이 도와 주시기 바랍니다.
이것은 사용자 정의 생성기에 매우 유용합니다.
확실히 2 :
def char_range(c1, c2):
"""Generates the characters from `c1` to `c2`, inclusive."""
for c in xrange(ord(c1), ord(c2)+1):
yield chr(c)
그때 :
for c in char_range('a', 'z'):
print c
확실히 3 :
def char_range(c1, c2):
"""Generates the characters from `c1` to `c2`, inclusive."""
for c in range(ord(c1), ord(c2)+1):
yield chr(c)
그때 :
for c in char_range('a', 'z'):
print(c)
import string
for char in string.ascii_lowercase:
print char
대문자, 숫자, 로케일 존재 문자를 포함하여 많은 것들이 상수 를 참조하십시오 . 모든 string.ascii_uppercase + string.ascii_lowercase
문자를 여러 세트에있는 것처럼 결합 할 수 있습니다 .
문자를 숫자로 다시 변환해야합니다.
for c in xrange(ord('a'), ord('z')+1):
print chr(c) # resp. print unicode(c)
아름다움과 가독성을 위해 생성기에 래핑 할 수 있습니다.
def character_range(a, b, inclusive=False):
back = chr
if isinstance(a,unicode) or isinstance(b,unicode):
back = unicode
for c in xrange(ord(a), ord(b) + int(bool(inclusive)))
yield back(c)
for c in character_range('a', 'z', inclusive=True):
print(chr(c))
이 inclusive=False
생성기 는 (일명) 과 함께 호출하여 정의의 일반적인 동작을 모방하여 요소를 포함 inclusive=True
할 수 있습니다. 그래서 기본적으로 inclusive=False
, 'a', 'z'
단지의 범위에 걸쳐을 구석으로 a
을 y
제외하고 z
.
a
, 중 하나 b
가 유니 코드이면 결과를 유니 코드로 반환하고 이름을 사용합니다 chr
.
현재 (아마도) Py2에서만 작동합니다.
여기에 다른 좋은 답변이 제안 (개인적으로 나는 아마도 string.lowercase를 사용할 것입니다), 완전성을 위해 소문자 ascii () 및 chr () 을 사용할 수 있습니다 .
for c in map(chr, xrange(97, 123)):
print c
짧은 고정 문자 목록이있는 경우 Python의 호스트 처리를 목록으로 사용하십시오.
for x in 'abcd':
print x
또는
[x for x in 'abcd']
for character in map( chr, xrange( ord('a'), ord('c')+1 ) ):
print character
인쇄물 :
a
b
c
# generating 'a to z' small_chars.
small_chars = [chr(item) for item in range(ord('a'), ord('z')+1)]
# generating 'A to Z' upper chars.
upper_chars = [chr(item).upper() for item in range(ord('a'), ord('z')+1)]
나는 다음과 같은 접근 방식을 좋아합니다.
base64chars = list(chars('AZ', 'az', '09', '++', '//'))
확실히 더 편안하게 구현할 수 있습니다.
확실히 3
무거운 버전 :
def chars(*args):
for a in args:
for i in range(ord(a[0]), ord(a[1])+1):
yield chr(i)
또는 목록 이해를 좋아한다면 :
def chars(*args):
return [chr(i) for a in args for i in range(ord(a[0]), ord(a[1])+1)]
첫 번째 결과 :
print(chars('ĀĈ'))
<generator object chars at 0x7efcb4e72308>
print(list(chars('ĀĈ')))
['Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ']
두 번째 결과는 다음과 가변적입니다.
print(chars('ĀĈ'))
['Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ']
정말 편리합니다.
base64chars = list(chars('AZ', 'az', '09', '++', '//'))
for a in base64chars:
print(repr(a),end='')
print('')
for a in base64chars:
print(repr(a),end=' ')
출력
'A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S''T''U''V''W''X''Y''Z''a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''s''t''u''v''w''x''y''z''0''1''2''3''4''5''6''7''8''9''+''/'
'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' '+' '/'
왜 list()
? 없이는 base64chars
(선택한 구현에 따라) 생성자가 될 수 있으므로 첫 번째 루프에서만 사용할 수 있습니다.
확실히 2
Python 2 유사하게 보관할 수 있습니다.하지만 유니 코드도 지원 훨씬 더 복잡합니다. Python 3을 선호하는 Python 2 사용을 중단하도록 권장하기 위해 여기에서 Python 2 솔루션을 제공하지 않습니다.)
새로운 프로젝트를 위해 오늘 Python 2를 피하십시오. 또한 오래된 프로젝트를 확장하기 전에 먼저 Python 3으로 이식 해 책을 읽어보세요. 장기적으로는 노력할 가치가 있습니다!
Python 2에서 유니 코드를 올바르게 처리하는 것은 매우 복잡하며이 지원이 처음부터 빌드되지 않은 경우 Python 2 프로젝트에 유니 코드 지원을 추가하는 것은 거의 불가능합니다.
이것을 Python 2로 백 포트하는 방법을 알려줍니다.
xrange
대신 사용range
unicodes
유니 코드 처리를위한 두 번째 함수 ( ?)를 만듭니다 .- 사용
unichr
대신에chr
반환하는unicode
대신str
- 아래 첨자가 제대로 작동 하도록 만들고 배열 하기 위해
unicode
문자열 을 공급args
하는 것을 잊지 마십시오.ord
- 사용
위의 상단 게시물에서 영감을 받아 다음과 같이 생각했습니다.
map(chr,range(ord('a'),ord('z')+1))
"for count in range"및 chr & ord 사용 :
print [chr(ord('a')+i) for i in range(ord('z')-ord('a'))]
목록 이해력 사용 :
for c in [chr(x) for x in range(ord('a'), ord('z'))]:
print c
여기 @ ned-batchelder의 대답을 사용하여 약간 수정하고 있습니다. python3
def char_range(c1, c2):
"""Generates the characters from `c1` to `c2`, inclusive."""
"""Using range instead of xrange as xrange is deprecated in Python3"""
for c in range(ord(c1), ord(c2)+1):
yield chr(c)
그러면 Ned의 대답과 똑같은 것입니다.
for c in char_range('a', 'z'):
print c
고마워 Ned!
다른 옵션 (범위처럼 작동-중지를 포함하려면 중지에 1을 추가)
>>> import string
>>> def crange(arg, *args):
... """character range, crange(stop) or crange(start, stop[, step])"""
... if len(args):
... start = string.ascii_letters.index(arg)
... stop = string.ascii_letters.index(args[0])
... else:
... start = string.ascii_letters.index('a')
... stop = string.ascii_letters.index(arg)
... step = 1 if len(args) < 2 else args[1]
... for index in range(start, stop, step):
... yield string.ascii_letters[index]
...
>>> [_ for _ in crange('d')]
['a', 'b', 'c']
>>>
>>> [_ for _ in crange('d', 'g')]
['d', 'e', 'f']
>>>
>>> [_ for _ in crange('d', 'v', 3)]
['d', 'g', 'j', 'm', 'p', 's']
>>>
>>> [_ for _ in crange('A', 'G')]
['A', 'B', 'C', 'D', 'E', 'F']
나는 동일한 필요가 있었고 이것을 사용했습니다.
chars = string.ascii_lowercase
range = list(chars)[chars.find('a'):chars.find('k')+1]
이것이 누군가를 도울 수 있기를 바랍니다.
참고 URL : https://stackoverflow.com/questions/7001144/range-over-character-in-python
'ProgramingTip' 카테고리의 다른 글
지원 라이브러리 VectorDrawable 리소스 $ NotFoundException (0) | 2020.11.09 |
---|---|
Python- 루프 내부의 이전 및 다음 값 (0) | 2020.11.09 |
Android : 사용자의 언어로 현재 요일 (월요일 등)을 가져 오는 방법은 무엇입니까? (0) | 2020.11.09 |
Xcode 7에서 관리하는 팀 악성 프로필의 장치를 새로 고치시겠습니까? (0) | 2020.11.09 |
SQL Server 인스턴스에 대한 데이터 디렉터리는 어떻게 찾습니까? (0) | 2020.11.09 |