Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 在0和1的列表中翻转一点_Python_List_Python 3.x - Fatal编程技术网

Python 在0和1的列表中翻转一点

Python 在0和1的列表中翻转一点,python,list,python-3.x,Python,List,Python 3.x,我有一个随机生成的0和1的列表。我需要选择一个位并将其翻转到相反的位置:0到1或1到0。 按位not运算符仅适用于整数和长整数,xor(^)运算符适用于两个整数 Enter a population size: 4 Enter an organism length: 2 [[1, 1], [0, 1], [0, 0], [0, 0]] [[[1, 1], [0, 1]]] 上面的代码是短用户输入程序的一部分,用户在该程序中输入pop大小和长度。该程序打印一个随机生成的数字列表,并考虑弹出的大小

我有一个随机生成的0和1的列表。我需要选择一个位并将其翻转到相反的位置:0到1或1到0。 按位not运算符仅适用于整数和长整数,xor(
^
)运算符适用于两个整数

Enter a population size: 4
Enter an organism length: 2
[[1, 1], [0, 1], [0, 0], [0, 0]]
[[[1, 1], [0, 1]]]
上面的代码是短用户输入程序的一部分,用户在该程序中输入pop大小和长度。该程序打印一个随机生成的数字列表,并考虑弹出的大小和长度,取前50%,这是第二个打印列表。现在我需要从第二个列表中选择一个随机位,并将其翻转为零或一。然而,并非全部清单


链接和解释是非常感谢,我期待改善

您可以使用
randint
为索引生成一个随机整数,然后使用例如
^1
将其翻转,如:

from random import randint

pop = [[1, 1], [0, 1], [0, 0], [0, 0]]
individual = pop[1]                            # select the second individual
individual[randint(0,len(individual)-1)] ^= 1  # flip the bit
运行此操作后,我获得:

>>> pop
[[1, 1], [0, 0], [0, 0], [0, 0]]
所以它翻转了第二位。但这也可能是第一次。通过使用
len(个体)
我们保证,如果个体的位数增加,它仍能工作

也就是说,将位编码为列表中的0-1不是很有效。您可以在Python中使用
int
s作为位列表(
int
s在中具有任意长度)

编辑

如果您希望每个位翻转一个位(每个位可以是不同的位),可以使用
for
循环:

for individual in pop:                             # iterate over population
    individual[randint(0,len(individual)-1)] ^= 1  # flip a random bit
如果我使用给定的初始人口运行此操作,我会得到:

>>> pop
[[0, 1], [1, 1], [0, 1], [1, 0]]

所以每个人都有一个倒转的位子,而不是全部倒转的位子。当然,它是随机的,因此在特定的运行中,随机数生成器可能会为每个个体拾取相同的位。

您可以使用
randint
为索引生成随机整数,然后使用例如
^1
来翻转它,如:

from random import randint

pop = [[1, 1], [0, 1], [0, 0], [0, 0]]
individual = pop[1]                            # select the second individual
individual[randint(0,len(individual)-1)] ^= 1  # flip the bit
运行此操作后,我获得:

>>> pop
[[1, 1], [0, 0], [0, 0], [0, 0]]
所以它翻转了第二位。但这也可能是第一次。通过使用
len(个体)
我们保证,如果个体的位数增加,它仍能工作

也就是说,将位编码为列表中的0-1不是很有效。您可以在Python中使用
int
s作为位列表(
int
s在中具有任意长度)

编辑

如果您希望每个位翻转一个位(每个位可以是不同的位),可以使用
for
循环:

for individual in pop:                             # iterate over population
    individual[randint(0,len(individual)-1)] ^= 1  # flip a random bit
如果我使用给定的初始人口运行此操作,我会得到:

>>> pop
[[0, 1], [1, 1], [0, 1], [1, 0]]

所以每个人都有一个倒转的位子,而不是全部倒转的位子。当然,它是随机的,因此在特定的运行中,随机数生成器可能会为每个个体选择相同的位。

要翻转单个位,请使用逻辑参数

int(not 0) = 1
int(not 1) = 0
如果你必须在每个人群中翻转一个比特,我建议:

chrom = random.choice(pop)
j = random.randrange(len(chrom))
chrom[j] = int(not chrom[j])

要翻转单个位,请使用逻辑参数

int(not 0) = 1
int(not 1) = 0
如果你必须在每个人群中翻转一个比特,我建议:

chrom = random.choice(pop)
j = random.randrange(len(chrom))
chrom[j] = int(not chrom[j])

如果我想为每个有机体翻转一位,我该怎么做?@tony:相同的位,或者每次都是随机的位?每次都是随机的位非常感谢:)个人=新的组织个人[randint(0,len(个人)-1)]^=1打印个人如果我想为每个有机体翻转一位,我该怎么做?@tony:相同的位,或者每次随机?每次随机位非常感谢:)个人=新组织个人[randint(0,len(个人)-1)]^=1打印个人你没有试过任何代码吗?你没有试过任何代码吗?