我一直试图找到一种更加pythonic的方法来生成python中的随机字符串,它也可以扩展.通常情况下,我会看到类似的东西
''.join(random.choice(string.letters) for i in xrange(len))
Run Code Online (Sandbox Code Playgroud)
如果你想生成长字符串很糟糕.
我一直在考虑random.getrandombits一段时间,并想出如何将其转换为一个位数组,然后十六进制编码.使用python 2.6我遇到了bitarray对象,没有记录.不知何故,我让它工作,它似乎真的很快.
它在我的笔记本上生成一个50mil的随机字符串,仅需3秒钟.
def rand1(leng):
nbits = leng * 6 + 1
bits = random.getrandbits(nbits)
uc = u"%0x" % bits
newlen = int(len(uc) / 2) * 2 # we have to make the string an even length
ba = bytearray.fromhex(uc[:newlen])
return base64.urlsafe_b64encode(str(ba))[:leng]
Run Code Online (Sandbox Code Playgroud)
编辑
heikogerlach指出,造成这个问题的人数奇怪.添加了新代码以确保始终从偶数个十六进制数字发送.
仍然很好奇,如果有更好的方法做到这一点同样快.
我正试图从蒂姆斯在线评判中解决这个问题.要解决此问题,您需要生成一个包含1 000 000个小写拉丁字母的序列,并在1秒内将其写入标准输入.
使用C++或Java很容易解决这个问题.我这里有python解决方案:
import os
from random import randint
s = ''.join(chr(97 + randint(0, 25)) for i in range(1000000))
os.write(1, bytes(s, 'utf8'))
Run Code Online (Sandbox Code Playgroud)
需要1.7秒:
$ time python3.3 1219.py > /dev/null
real 0m1.756s
user 0m1.744s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)
我得到了"超出时间限制"的结果.所以问题是"如何更快地做到这一点?"
UPD1:使用randint(97, 122)减少16ms的时间.现在是1.740s
UPD2: @Martijn Pieters的解决方案需要0.979秒,但它也没有通过测试.
UPD3 Martijn Pieters提出了一个非常好的解决方案,但它仍然很慢:
from sys import stdin
from random import choice
from string import ascii_lowercase
s = ''.join([choice(ascii_lowercase) for _ in range(1000000)])
stdout.write(s)
Run Code Online (Sandbox Code Playgroud)
需要0.924秒
from sys import stdout
from random import …Run Code Online (Sandbox Code Playgroud) 有一个像它的字符串
dxabcabcyyyydxycxcxz
Run Code Online (Sandbox Code Playgroud)
我想将它合并到
dxabcydxycxz
Run Code Online (Sandbox Code Playgroud)
其他例子: ddxddx - > dxdx,abbab - > abab.
规则是:
if (adjacent and same): merge
# Such as 'abc',they are same and , so I will delete one of them .
# Although 'dx' is same as 'dx',they are nonadjacent,so I do not delete any of them
# If one character has been deleted, we don't delete any sub-string include it
Run Code Online (Sandbox Code Playgroud)
我在python的代码中完成了它,但是当它在一个长字符串中时它很慢.
# original string
mystr = "dxabcabcyyyydxycxcxz"
str_len = len(mystr)
vis = [1] *str_len #Use a …Run Code Online (Sandbox Code Playgroud) 我正在使用unittest和selenium来自动化我的浏览器测试.
我将如何进行多次运行的测试,用户创建票证.票证必须有一个标题名称,每次我运行测试我希望标题名称是随机的.
我想格式:"测试票,1 |测试票,2 ......"
我正在尝试做一个生成随机字符串的代码,但我刚开始编码所以我不希望代码太复杂.
import random, string
randomthing = random.choice(string)
print(randomthing(10))
Run Code Online (Sandbox Code Playgroud)
但它一直说长度(len)没有定义.我该怎么办?
python ×5
python-3.x ×2
random ×2
algorithm ×1
automation ×1
performance ×1
python-2.6 ×1
selenium ×1
stdin ×1
string ×1
webdriver ×1