0

我把这段代码放在一起,它生成了一个由 11 个随机可打印的 ascii 字符组成的字符串:

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

它工作正常,但我不禁觉得可能有比调用“附加”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

您可以使用一些功能来使您的工作更加健壮。

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

您不需要将其放入列表的中间步骤:

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

以下将打印与您的方法相同的内容。

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