Диапазон букв в Python
Как создать список букв алфавита, не вводя его вручную, как показано ниже?
['a', 'b', 'c', 'd', ..., 'z']
5 ответ(ов)
Для получения строчных букв латинского алфавита в Python можно использовать модуль string
. Например:
>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
Если вам необходимо получить список строчных букв, вы можете использовать list
:
>>> list(string.ascii_lowercase)
['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']
Альтернативно, вы можете использовать range
для получения этого же результата:
>>> list(map(chr, range(97, 123)))
['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']
Либо эквивалентный способ:
>>> list(map(chr, range(ord('a'), ord('z') + 1)))
['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']
Также полезно знать о других функциях модуля string
:
>>> help(string)
....
DATA
ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
digits = '0123456789'
hexdigits = '0123456789abcdefABCDEF'
octdigits = '01234567'
printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
whitespace = ' \t\n\r\x0b\x0c'
Этот модуль содержит много других полезных констант и функций, которые могут облегчить работу с текстом в Python.
Этот код создает список строчных букв английского алфавита. Давайте разберем его по частям.
ord('a')
иord('z')
— функцииord
возвращают целочисленные значения Unicode для символов 'a' и 'z'.ord('a')
вернет 97,ord('z')
вернет 122.
range(ord('a'), ord('z') + 1)
создает диапазон чисел от 97 до 122 (включительно).Затем, с помощью
chr(i)
для каждого значенияi
в этом диапазоне, мы преобразуем числа обратно в символы.В итоге, выражение
[chr(i) for i in range(ord('a'), ord('z') + 1)]
создает список символов от 'a' до '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']
В Python 2.7 и 3 вы можете использовать следующий код:
import string
string.ascii_lowercase
# 'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase
# 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
Как отметила @Zaz, string.lowercase
устарело и больше не работает в Python 3, но string.ascii_lowercase
функционирует в обоих версиях.
Вот простая реализация диапазона букв:
Код
def letter_range(start, stop="{", step=1):
"""Генерирует диапазон строчных букв."""
for ord_ in range(ord(start.lower()), ord(stop.lower()), step):
yield chr(ord_)
Пример
list(letter_range("a", "f"))
# ['a', 'b', 'c', 'd', 'e']
list(letter_range("a", "f", step=2))
# ['a', 'c', 'e']
Этот код позволяет генерировать последовательности строчных букв от символа start
до символа stop
(не включая его), с заданным шагом. По умолчанию шаг равен 1.
Если вы ищете эквивалент letters[1:10]
из R, вы можете использовать следующий код на Python:
import string
list(string.ascii_lowercase[0:10])
Этот код импортирует строку с маленькими буквами английского алфавита и извлекает первые 10 букв, аналогично тому, как это делается в R.
Почему используется string.join(list), а не list.join(string)?
Удалить пустые строки из списка строк
Как преобразовать строковое представление списка в список?
Как проверить, является ли строка подстрокой элементов в списке строк?
Есть ли в Python метод подстроки 'contains' для строк?