Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串元素中的1翻转为0,反之亦然_Python - Fatal编程技术网

Python 将字符串元素中的1翻转为0,反之亦然

Python 将字符串元素中的1翻转为0,反之亦然,python,Python,我正在写一个简单的遗传算法,变异算子要求我以一定的概率随机翻转一个“基因”(即:字符串中的一个字符) 这是我需要随机翻转每个字符的列表示例: a = ['0010010', '0011101', '1101101', '0100110', '1010100', '1000111', '1001110', '0010011', '0011111', '0001001', '0101000', '1010010', '1110000', '0000001', '1100111', '1001100'

我正在写一个简单的遗传算法,变异算子要求我以一定的概率随机翻转一个“基因”(即:字符串中的一个字符)

这是我需要随机翻转每个字符的列表示例:

a = ['0010010', '0011101', '1101101', '0100110', '1010100', '1000111', '1001110', '0010011', '0011111', '0001001', '0101000', '1010010', '1110000', '0000001', '1100111', '1001100', '1000001', '1001010']
我循环遍历列表中每个元素中的每个字符,以检查是否必须像这样翻转它:

for elem in a:
    for char in elem:
        r = random.random()
        if r<prob:
            # Flip the char.
            f_char = 1-int(char)
            # Replace the new flipped char in the element?
适用于a中的元素:
对于元素中的字符:
r=random.random()

如果r字符串是不可变的,那么当你突变染色体中的一个基因时,你必须替换染色体列表中的整个染色体。所以试试这个:

for i,elem in enumerate(a):
    a[i] = ''.join(char if random.random()>prob else str(1-int(char)) for char in elem)

字符串是不可变的,所以当你对染色体中的一个基因进行突变时,你必须替换染色体列表中的整个染色体。所以试试这个:

for i,elem in enumerate(a):
    a[i] = ''.join(char if random.random()>prob else str(1-int(char)) for char in elem)
两种选择:

首先,可以使用整数列表而不是字符串。然后,对它们进行适当的变异:

a = [[0, 0, 1, 0, 0, 1, 0], [0, 0, 1, 1, 1, 0, 1]]
for elem in a:
    for i, bit in enumerate(elem):
        r = random.random()
        if r < prob:
            elem[i] = 1 - bit
a=[[0,0,1,0,0,1,0],[0,0,1,1,1,0,1]]
对于a中的元素:
对于i,枚举中的位(元素):
r=random.random()
如果r
第二,仍然可以使用字符串,但是每次要更改字符串中的一个字符时都必须替换整个字符串,因为Python字符串是不可变的。最好的方法是使用生成器理解,如inspectorG4dget的回答:

a = ['0010010', '0011101']
for i, elem in enumerate(a):
    a[i] = ''.join(str(1 - int(char)) if random.random() < prob else char
                   for char in elem)
a=['0010010','0011101']
对于i,枚举(a)中的元素:
a[i]=''.join(str(1-int(char))if random.random()
有两种选择:

首先,可以使用整数列表而不是字符串。然后,对它们进行适当的变异:

a = [[0, 0, 1, 0, 0, 1, 0], [0, 0, 1, 1, 1, 0, 1]]
for elem in a:
    for i, bit in enumerate(elem):
        r = random.random()
        if r < prob:
            elem[i] = 1 - bit
a=[[0,0,1,0,0,1,0],[0,0,1,1,1,0,1]]
对于a中的元素:
对于i,枚举中的位(元素):
r=random.random()
如果r
第二,仍然可以使用字符串,但是每次要更改字符串中的一个字符时都必须替换整个字符串,因为Python字符串是不可变的。最好的方法是使用生成器理解,如inspectorG4dget的回答:

a = ['0010010', '0011101']
for i, elem in enumerate(a):
    a[i] = ''.join(str(1 - int(char)) if random.random() < prob else char
                   for char in elem)
a=['0010010','0011101']
对于i,枚举(a)中的元素:
a[i]=''.join(str(1-int(char))if random.random()