11 個のランダムな印刷可能な ASCII 文字列を生成するこのコードをまとめました。
import random
foo=[]
for n in range(11):
foo.append(chr(random.randint(32,126)))
print "".join(foo)
問題なく動作しますが、「append」を 11 回呼び出すよりも効率的な方法があるのではないかと感じずにはいられません。より Pythonic にするためのヒントはありますか?
リスト内包表記を使用します。
foo = [chr(random.randint(32,126)) for _ in xrange(11)]
それを次のものと組み合わせることができますstr.join()
:
print ''.join([chr(random.randint(32,126)) for _ in xrange(11)])
xrange()
によって作成されたリストは必要ないので、ここで使用しましたrange()
。序列のみ。
クイックデモ:
>>> import random
>>> ''.join([chr(random.randint(32,126)) for _ in xrange(11)])
'D}H]qxfD6&,'
それをリストに入れる中間ステップは必要ありません。
import random
foo=''
for n in range(11):
foo += chr(random.randint(32,126))
print foo
いくつかの関数を使用して、作業をより堅牢にすることができます。
from random import randint
def random_ascii_string(length=11):
return ''.join([random_ascii_char() for _ in range(length)])
def random_ascii_char():
return chr(randint(32,126))
それを使用して:
>>> random_ascii_string(11)
'.K#d7#q d]%'
以下は、メソッドと同じものを出力します。
print ''.join(chr(random.randint(32,126)) for n in range(11))