2012-01-28 10 views
9

、私はこのような構文を使用しますどのような文字列を生成するのはどうですか?私はこれよりもよりよい解決策を考え出すことができなかった</p> <pre><code>a..z </code></pre> <p>::他の言語で

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

の短い、より読みやすい方法はありますそのようなリストを作成する?

+0

、私は行きますよ言及するには['string.lowercase'](http://docs.python.o rg/library/string.html#string.lowercase)をコメントに追加しますが、アルファベット全体(** Edit **:... sigh)が必要な場合にのみ有効です –

+1

はい、_string.lowercase_も使用できます解読可能な解法ですが、アルファベット全体が必要な場合にのみ機能します。 _range( "a"、 "c")_ – Jeremy

+2

のようなことができたらいいなと思っています。しかし、今のように 'a'から' y'に行くと 'ord( 'z')+ 1'は問題を解決するはずです – juliomalegria

答えて

6

ないあなたは、zよりも、他の何かをしたいが、あなたはこれを行うことができれば、必ずしも素晴らしい:

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

他の範囲'a..z'は' ascii_lowercase'のスライスを簡単に取ることができるからです。 –

+2

@ larsmans簡単に...どのように?あなたの頭の中の終端文字を手動でオフセットに変換する以外に、 –

0

あなたはmap(chr,range(ord('a'),ord('z')+1))コールでリストの内包を置き換えることができますが、それはおそらくない何」本当に頼んでいる。ただし、表示する例はより適切にインポートされます。 string.lowercaseの文字列として使用できます。

文字が序列と一致していると仮定すると、ßやæなどの文字を考慮すると間違っている可能性があります(Åäöはスウェーデン語のアルファベットで最後ですが、äとöはaとドイツ語で)。そのため、unicode.islower()やlocale.strcoll()などの関数があります。

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'] 
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文字列はiterablesです。

あなたは、アルファベットのサブセットが必要な場合は、これを行うにはいいとPython的な方法があります。

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

他の場所で述べたように、「」「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

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

ランダムな文字の選択が望ましい結果であると思われる理由が分かりません。 – hughdbrown

関連する問題

 関連する問題