创建一个根据概率更改列表中值的函数

时间:2018-10-21 18:23:03

标签: python python-3.x bitwise-operators

我是python的新手(或对此编程)。我正在寻找一个具有两个参数的def函数:位列表和错误概率。

对于位列表中的每个元素,都有机会(错误概率)将元素从0翻转到1,反之亦然。该函数应返回新列表,其中包含位和被翻转的实际位数。

我已经进行了大约一个半小时的实验,但实际上并没有提出任何建议。我知道我们应该在def函数中使用random.random函数和一个for循环,但实际上没有任何作用。

结果应如下所示:

>>>x [0,0,1,1,0,0,0,0]

>>>(NewList,FlipTimes)=TheFunction(x,0.2)
>>>NewList
[0,0,1,0,1,0,0,1]
>>>FlipTimes
3

再次,我对编程非常陌生,所以我在这里的尝试是徒劳的。

def addNoise(a,b):

c=0
for x in a:
    y=random.random
    if y<b:
        if x==1:
            x=0
        else:
            x=1
    for i in x:
        if y<b== True:
            c+=1
return(x,c)

1 个答案:

答案 0 :(得分:1)

import random

def flipbit(x, prob):
    count = 0
    out = []
    for e in x:
        if random.random() <= prob:
            count += 1
            out.append(int(not e))
        else:
            out.append(e)
    return out, count


x = [0,0,1,0,1,0,0,1]
new_list, flip_times = flipbit(x, 0.2)
print ('original: ', x)
print ('new list: ', new_list)
print ('flip times: ', flip_times)

# original:  [0, 0, 1, 0, 1, 0, 0, 1]
# new list:  [0, 0, 1, 0, 1, 1, 1, 1]
# flip times:  2