从给定字符生成固定长度随机字符串的内置方法

ins*_*get 3 python string random

这就是我的问题所在:我需要制作一个长度为50个字符的随机字符串,由1s和0s组成.

我知道如何解决这个问题,甚至有一个单行.我也找了各种办法解决这一问题上的SO,只拿回我已经知道(1,2,等等).但我真正想要的是最恐怖的做法.

目前,我倾向于 ''.join(( random.choice([0,1]) for i in xrange(50) ))

有更多的pythonic方式吗?是否有内置功能可以执行此类操作itertools?

unu*_*tbu 6

对于Python2.7或更高版本:

In [83]: import random

In [84]: '{:050b}'.format(random.randrange(1<<50))
Out[84]: '10011110110110000011111000011100101111101001001011'
Run Code Online (Sandbox Code Playgroud)

(在Python2.6中,使用'{0:050b}'而不是'{:050b}'.)


说明:

该string.format方法可以将整数转换为二进制字符串表示形式.执行此操作的基本格式代码是'{:b}':

In [91]: '{:b}'.format(10)
Out[91]: '1010'
Run Code Online (Sandbox Code Playgroud)

要创建宽度为50的字符串,请使用格式代码'{:50b}':

In [92]: '{:50b}'.format(10)
Out[92]: '                                              1010'
Run Code Online (Sandbox Code Playgroud)

并用零填充空白,使用{:050b}:

In [93]: '{:050b}'.format(10)
Out[93]: '00000000000000000000000000000000000000000000001010'
Run Code Online (Sandbox Code Playgroud)

str.format的语法起初有点令人生畏.这是我的备忘单:

http://docs.python.org/library/string.html#format-string-syntax
replacement_field ::= "{" field_name ["!" conversion] [":" format_spec] "}"
field_name        ::= (identifier|integer)("."attribute_name|"["element_index"]")* 
attribute_name    ::= identifier
element_index     ::= integer
conversion        ::= "r" | "s"
format_spec       ::= [[fill]align][sign][#][0][width][,][.precision][type]
fill              ::= <a character other than '}'>
align             ::= "<" | ">" | "=" | "^"
                      "=" forces the padding to be placed after the sign (if any)
                          but before the digits. (for numeric types)
                      "<" left justification
                      ">" right justification 
                      "^" center justification
sign              ::= "+" | "-" | " "
                      "+" places a plus/minus sign for all numbers    
                      "-" places a sign only for negative numbers
                      " " places a leading space for positive numbers
#                     for integers with type b,o,x, tells format to prefix
                      output with 0b, 0o, or 0x.
0                     enables zero-padding. equivalent to 0= fill align.
width             ::= integer
,                     tells format to use a comma for a thousands separator
precision         ::= integer
type              ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" |
                      "o" | "x" | "X" | "%"
    c convert integer to corresponding unicode character
    n uses a locale-aware separator
    % multiplies number by 100, display in 'f' format, with percent sign
Run Code Online (Sandbox Code Playgroud)