0

11 個のランダムな印刷可能な ASCII 文字列を生成するこのコードをまとめました。

import random
foo=[]
for n in range(11):
    foo.append(chr(random.randint(32,126)))
print "".join(foo)

問題なく動作しますが、「append」を 11 回呼び出すよりも効率的な方法があるのではないかと感じずにはいられません。より Pythonic にするためのヒントはありますか?

4

4 に答える 4

6

リスト内包表記を使用します。

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&,'
于 2013-08-21T14:37:28.010 に答える
0

それをリストに入れる中間ステップは必要ありません。

import random
foo=''
for n in range(11):
    foo += chr(random.randint(32,126))
print foo
于 2013-08-21T14:42:49.460 に答える
0

いくつかの関数を使用して、作業をより堅牢にすることができます。

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]%'
于 2013-08-21T14:41:58.073 に答える
0

以下は、メソッドと同じものを出力します。

print ''.join(chr(random.randint(32,126)) for n in range(11))
于 2013-08-21T14:51:20.250 に答える