Rentang alfabet dengan Python


424

Alih-alih membuat daftar karakter alfabet seperti ini:

alpha = ['a', 'b', 'c', 'd'.........'z']

Apakah ada cara agar kita dapat mengelompokkannya ke suatu rentang atau sesuatu? Misalnya, untuk angka dapat dikelompokkan menggunakan range():

range(1, 10)

tampaknya beberapa jawaban mungkin perlu pembaruan untuk python 3?
Charlie Parker

2
@CharlieParker Tidak, sejak awal saya memastikan jawaban saya akan bekerja pada Python 3 dan juga Python 2 pada saat yang sama, karena saya menggunakan string.ascii_lowercase(tersedia pada keduanya) dan bukan string.lowercase(hanya pada py2)
jamylak

dupe dari stackoverflow.com/questions/14927114/… (yang itu sendiri juga tampaknya merupakan penipuan)
hkBst

@ hkBst Tampaknya perbedaannya adalah bahwa pertanyaan-pertanyaan itu meminta rentang subset huruf, sementara yang satu ini meminta seluruh alfabet (yang membuat jawabannya lebih spesifik)
jamylak

Jawaban:


765
>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

Jika Anda benar-benar membutuhkan daftar:

>>> 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']

Dan melakukannya dengan range

>>> list(map(chr, range(97, 123))) #or 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']

Fitur stringmodul bermanfaat lainnya:

>>> help(string) # on Python 3
....
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'

2
Terima kasih. Bagaimana cara saya membuatnya terbalik?
Alexa Elis

63
string.ascii_lowercase[::-1]
jamylak

Daftar eksplisit (...) pada hasil peta (...) berlebihan karena peta sudah mengembalikan daftar
haavee

1
@haavee Sebenarnya tidak dalam Python 3 maptidak mengembalikanlist
jamylak

1
Saya ingin tahu apakah ada cara untuk melakukan hal yang sama untuk lokal tertentu, yaitu mendapatkan huruf Spanyol, Turki, dll.
Gonzalo

106
[chr(i) for i in range(ord('a'),ord('z')+1)]

1
Saya mendapat: [chr (alpha + 97) untuk alpha dalam kisaran (0,27)] tapi ini jauh lebih intuitif. Tidak perlu mengingat bahwa ascii dari adalah 97
peterb

5
@MoeChughtai Saya tidak mengerti bagaimana ini lebih ringkas daristring.ascii_lowercase
jamylak

Juga: chrange = lambda s: "".join(map(chr, range(*map(ord, s))) + [c[1]]). Penggunaan: >>> chrange("az") -> 'abcdefghijklmnopqrstuvwxyz'. Untuk daftar, cukup hapus"".join( )
Braden Best

@jamylak Mungkin MoeChughtai berarti bahwa jawaban ini benar-benar tidak menenggelamkan solusi dalam penjelasan yang panjang.
Fornost

1
@Fost import stringadalah penjelasan yang panjang?
jamylak

34

Dalam Python 2.7 dan 3 Anda dapat menggunakan ini:

import string
string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Seperti @Zaz katakan: string.lowercasesudah usang dan tidak lagi berfungsi di Python 3 tetapi string.ascii_lowercasebekerja di keduanya


2
Dalam Python 3, gunakan string.ascii_lowercase. Tapi ini mengembalikan sebuah string. Jika Anda memerlukan daftar, saya pikir, Bg1850 adalah solusi yang rapi
peterb

Sebagai jawaban atas menyebutkan, string.ascii_letters, string.ascii_lowercase, string.ascii_uppercasesemua pekerjaan di python 3+.
SlimPDX

@peterblist(string.ascii_lowercase)
Braden Best

11

Berikut ini adalah implementasi rentang surat sederhana:

Kode

def letter_range(start, stop="{", step=1):
    """Yield a range of lowercase letters.""" 
    for ord_ in range(ord(start.lower()), ord(stop.lower()), step):
        yield chr(ord_)

Demo

list(letter_range("a", "f"))
# ['a', 'b', 'c', 'd', 'e']

list(letter_range("a", "f", step=2))
# ['a', 'c', 'e']

2
Sangat bagus! Juga berfungsi dengan karakter non-Latin. Saya baru saja mencoba.
MarkS

3

Jika Anda mencari yang setara dengan letters[1:10]dari R, Anda dapat menggunakan:

 import string
 list(string.ascii_lowercase[0:10])

1

Cetak huruf besar dan kecil dengan python menggunakan fungsi rentang bawaan

def upperCaseAlphabets():
    print("Upper Case Alphabets")
    for i in range(65, 91):
        print(chr(i), end=" ")
    print()

def lowerCaseAlphabets():
    print("Lower Case Alphabets")
    for i in range(97, 123):
        print(chr(i), end=" ")

upperCaseAlphabets();
lowerCaseAlphabets();

1

Ini adalah cara termudah yang saya tahu:

#!/usr/bin/python3 for i in range(97, 123): print("{:c}".format(i), end='')

Jadi, 97 hingga 122 adalah angka ASCII yang setara dengan 'a' to dan 'z'. Perhatikan huruf kecil dan kebutuhan untuk menempatkan 123, karena itu tidak akan dimasukkan).

Dalam fungsi cetak pastikan untuk mengatur format {:c}(karakter), dan, dalam hal ini, kami ingin mencetak semuanya bersama-sama bahkan tidak membiarkan baris baru di akhir, jadi end=''akan melakukan pekerjaan.

Hasilnya adalah ini: abcdefghijklmnopqrstuvwxyz

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.