2012-01-28 36 views
9

Trong các ngôn ngữ khác, tôi sẽ sử dụng một cấu trúc như thế này:Cách tạo ra một loạt các ký tự là gì?

a..z 

tôi không thể tìm ra một giải pháp tốt hơn thế này:

[chr(x) for x in range(ord("a"), ord("z") + 1)] 

Có một cách dễ đọc hơn ngắn hơn xây dựng một danh sách như vậy?

+0

Trong một nỗ lực nhằm ngăn cản người dân từ việc trả lời với nó, tôi sẽ đề cập đến ['string.lowercase'] (http: //docs.python.o rg/library/string.html # string.lowercase) trong một nhận xét, nhưng nó chỉ hoạt động nếu bạn muốn toàn bộ bảng chữ cái (** Edit **: ... sigh) –

+1

Có, _string.lowercase_ có thể được sử dụng, nó cũng một giải pháp có thể đọc được, nhưng nó chỉ hoạt động nếu bạn muốn toàn bộ bảng chữ cái. Tôi thực sự muốn tôi có thể làm một cái gì đó như _range ("a", "c") _ – Jeremy

+2

Tôi nghĩ rằng giải pháp này thực sự là một tốt đẹp nhất. Nhưng vì nó là ngay bây giờ, nó chỉ đi từ 'a' sang' y', 'ord ('z') + 1' sẽ giải quyết vấn đề – juliomalegria

Trả lời

6

Không nhất thiết tuyệt vời nếu bạn muốn làm một cái gì đó khác hơn a đến z, nhưng bạn có thể làm điều này:

from string import ascii_lowercase 
for c in ascii_lowercase: 
    print c 
+1

Khá tuyệt vời cho các phạm vi khác hơn 'a..z', bởi vì bạn có thể dễ dàng lấy một lát 'ascii_lowercase'. –

+2

@larsmans Dễ dàng ... làm thế nào? Khác hơn là chuyển đổi thủ công các ký tự cuối thành dời gốc trong đầu của bạn, loại đánh bại điểm –

0

Bạn có thể thay thế cho sự hiểu biết danh sách với một cuộc gọi map(chr,range(ord('a'),ord('z')+1)), nhưng đó là có lẽ không phải những gì bạn' thực sự yêu cầu. Ví dụ bạn hiển thị, tuy nhiên, được nhập khẩu phù hợp hơn; nó có sẵn dưới dạng một chuỗi trong string.lowercase. Giả sử chữ cái khớp với số thứ tự có thể là một sai lầm, xem xét các chữ cái như ß và æ, có thể được sắp xếp khác nhau tùy thuộc vào địa điểm (tức là åäö là cuối cùng trong bảng chữ cái cho Thụy Điển, nhưng ä và ö là các biến thể của a và o bằng tiếng Đức). Đó là lý do tại sao chúng ta có các hàm như unicode.islower() và locale.strcoll().

1

cách của tôi là giống như của bạn nhưng bạn có thể sử dụng map và tạo ra một chức năng tùy tiện như thế này

>>> def generate_list(char1,char2): 
...  myl = map(chr, range(ord(char1),ord(char2)+1)) 
...  print myl 
... 
>>> generate_list("a","d") 
['a', 'b', 'c', 'd'] 
1

Không có gì sai với danh sách-hiểu của bạn là, nhưng có lẽ bạn muốn thử:

from string import lowercase 
print lowercase 
    abcdefghijklmnopqrstuvwxyz 
print list(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'] 

Như đã lưu ý bởi julio.alegria và Nathan Binkert lowercase là một chuỗi các chữ thường và các chuỗi Python có thể lặp lại được.

Nếu bạn cần tập con của bảng chữ cái, có những cách tốt đẹp và Pythonic để làm điều này:

print lowercase.find('f') 
    5 
print lowercase[5,9] 
    fghij 
print filter(lambda c: ord('f') <= ord(c) <= ord('j'), lowercase) 
    fghij 
0

Như đã đề cập ở những nơi khác, các chữ 'a' qua 'z' là đã có trong string.lowercase. Vì vậy, bạn chỉ có thể lấy một phần của điều đó.

import string 
def create_letter_list(start_char, end_char): 
    return string.lowercase[ord(start_char) - ord('a'): ord(end_char) - ord('a') + 1] 

letter_list = create_letter_list('g', 'n') 
print letter_list 

Output:

ghijklmn

1

Tuy nhiên, một tùy chọn:

from string import ascii_lowercase 

def charRange(start, end): 
    offset = ord('a') 
    return ascii_lowercase[ord(start)-offset:ord(end)-offset+1] 

charRange('a', 'f') 
> 'abcdef' 
0
import random 

def random_chars(size=10, chrs=string.ascii_uppercase + string.digits): 
    return ''.join(random.choice(chrs) for x in range(size)) 
+0

Bạn không chắc chắn lý do tại sao bạn cho rằng lựa chọn các chữ cái ngẫu nhiên là kết quả mong muốn. – hughdbrown

Các vấn đề liên quan