我想模拟邮件的错误(例如:1000010011 => 1010000011)。有没有办法在Python中实现它?我尝试了以下工作:
import random
a = "1011101101"
b = [el for el in a] # b = ['1', '0', '1', '1', '1', '0', '1', '1', '0', '1']
random.shuffle(b)
print b # b = ['0', '1', '1', '1', '0', '1', '1', '1', '1', '0']
random.shuffle(b, random.random)
print b # b = ['1', '1', '0', '1', '1', '0', '1', '0', '1', '1']
我希望我的重新排序是正态/高斯分布式的。 例如:
import random
a = "1011101101"
b = [el for el in a] # b = ['1', '0', '1', '1', '1', '0', '1', '1', '0', '1']
random.shuffle(b,random.gauss(0.5,0.1))
print b # b = ['1', '0', '1', '1', '0', '0', '1', '1', '1', '1'] <= assume this is Gaussian distributed...
# OR
c = random.gauss(0.5,0.1)
random.shuffle(b,c)
print b # b = ['0', '0', '1', '1', '1', '0', '1', '1', '1', '1'] <= assume this is also Gaussian distributed...
然而,这不起作用,我收到消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\random.py", line 287, in shuffle
j = int(random() * (i+1))
TypeError: 'float' object is not callable
非常感谢任何建议/评论。
由于
注意:我这里只要求重新排序错误(例如:1000010011 =&gt; 1010000011)。但是,我还计划模拟突发错误(例如:1000010011 =&gt; 1011111011),单个事件(例如:1000010011 =&gt; 1000010011)等。
答案 0 :(得分:4)
random.shuffle
的第二个参数应该是可调用的,而不是浮点数。尝试:
random.shuffle(b, lambda:random.gauss(0.5,0.1))
要限制从0到1的间隔,您可以使用
random.shuffle(b, lambda: max(0.0, min(1.0, random.gauss(0.5,0.1))))
(谢谢@DSM)
如果你是迂腐的,上面的上限实际上包含1.0,这会导致random.shuffle
出错。实际上,您应该用小于1.0的最大浮点数替换1.0。
答案 1 :(得分:4)
c = lambda: random.gauss(0.5,0.1)