我的清单如下:
mylist = [['0010', 0.9], ['1111', 2.03], ['1101', 2.04], ['0010', 0.90]]
我想对这些元素的每两个连续对进行操作,主要是二进制部分。所以对于mylist[0][0]
(0010)和mylist[1][0]
(1111),我想为每个位生成一个随机数,如果这个数小于0.8,则交换两个连续字符串中的每个对应位。(无重叠)
为了简单起见,假设我一直得到0.4概率,那么我的字符串应该是:
0010 ---> 1111 mylist[0][0]
1111 ---> 0010 mylist[1][0]
Done comparing two strings.
---------------
1101 ---> 0010 mylist[2][0]
0010 ---> 1101 mylist[3][0]
Done comparing two strings.
第二部分(0.9和2.03及类似版本)并不重要,但它只是作为一个结构存在
我的尝试如下:
mylist = [['0010', 0.9], ['1111', 2.03], ['1101', 2.04], ['0010', 0.90]]
numberoftotalstrings = 4
lengthofbits = 4
for i in range(0, numberoftotalstrings, 2):
currentword = list(mylist[i][0])
nextword = list(mylist[i+1][0])
for j in range(0, lengthofbits, 1):
x = random.uniform(0,1)
print (x)
if x <= 0.8:
tmp = currentword[j]
currentword[j] = nextword[j]
nextword[j] = tmp
tmp1 = "".join(currentword)
tmp2 = "".join(nextword)
mylist[i][0] = tmp1
mylist[i+1][0] = tmp2
但遗憾的是,它似乎没有产生工作结果,因为一些交换操作本应该发生,反之亦然。我不明白缺失的部分是什么
您的代码似乎产生了预期的结果
测试1:硬编码x=0.4,生成您指定的输出
测试2:代码重写产生相同的输出
重构代码
下面是对产生相同输出的代码的重写
注意:在运行新代码和原始代码之前,使用random.seed(1023)进行测试,以便它们具有相同的随机数序列
相关问题 更多 >
编程相关推荐