我把这段代码放在一起,它生成了一个由 11 个随机可打印的 ascii 字符组成的字符串:
import random
foo=[]
for n in range(11):
foo.append(chr(random.randint(32,126)))
print "".join(foo)
它工作正常,但我不禁觉得可能有比调用“附加”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&,'
您可以使用一些功能来使您的工作更加健壮。
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]%'
您不需要将其放入列表的中间步骤:
import random
foo=''
for n in range(11):
foo += chr(random.randint(32,126))
print foo
以下将打印与您的方法相同的内容。
print ''.join(chr(random.randint(32,126)) for n in range(11))