什么是产生一系列字符的pythonic方法?

时间:2012-01-28 21:32:31

标签: python

在其他语言中,我会使用这样的结构:

a..z

我无法想出一个比这更好的解决方案:

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

是否有更短,更易读的方法来构建这样的列表?

7 个答案:

答案 0 :(得分:6)

如果您想要执行除z之外的其他操作,则不一定非常好,但您可以这样做:

from string import ascii_lowercase
for c in ascii_lowercase:
    print c

答案 1 :(得分:1)

我的方式与你的相似,但你可以使用map并创建一个像这样的任意函数

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

答案 2 :(得分:1)

你的列表理解没有任何问题,但也许你想尝试:

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

正如julio.alegria和Nathan Binkert lowercase所指出的那样,是一个包含全部小写字母的字符串,Python字符串是可迭代的。

如果你需要字母表的子集,有很好的和Pythonic方法可以做到这一点:

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

答案 3 :(得分:1)

又一个选择:

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'

答案 4 :(得分:0)

您可以使用map(chr,range(ord('a'),ord('z')+1))来代替列表理解,但这可能不是您真正要求的。但是,您显示的示例更适合导入;它在string.lowercase中以字符串形式提供。

假设字母与序数匹配可能是错误的,考虑像ß和æ这样的字母,根据区域设置可能会有不同的排序(即åäö是瑞典语字母表中的最后一个字母,但ä和ö是a和o的变体在德国)。这就是为什么我们有像unicode.islower()和locale.strcoll()这样的函数。

答案 5 :(得分:0)

如其他地方所述,字母'a'到'z'已经在string.lowercase中。因此,您可以从中获取一部分。

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

输出:

  

ghijklmn

答案 6 :(得分:0)

import random

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