Python中的遗传算法:根据更高的适应度将生物体列表一分为二
我需要根据健康状况对生物体列表进行排序。下面的代码根据用户输入生成一个随机列表——“生物体”。然而,有一个bug,列表只是有时排序。有了排序后的列表,我需要取一半。适应度值越高,每个有机体的总和就决定了哪个有机体处于上半部分Python中的遗传算法:根据更高的适应度将生物体列表一分为二,python,algorithm,sorting,genetics,Python,Algorithm,Sorting,Genetics,我需要根据健康状况对生物体列表进行排序。下面的代码根据用户输入生成一个随机列表——“生物体”。然而,有一个bug,列表只是有时排序。有了排序后的列表,我需要取一半。适应度值越高,每个有机体的总和就决定了哪个有机体处于上半部分 import random as randint pop_size = int(input('Enter a population size:')) length = int(input('Enter an organism length:'))
import random as randint
pop_size = int(input('Enter a population size:'))
length = int(input('Enter an organism length:'))
orgs = []
for i in range(pop_size):
org = []
for a in range(length):
org.append(randint.randint(0,1))
orgs.append(org)
print sorted(orgs, key=sum)
非常感谢您的解释,我是一名初学者,正在努力提高
sorted
将提供按子列表总和升序排序的外部列表。您可能希望排序(orgs,key=sum,reverse=True)
-这取决于您如何定义“上半部分”,我假设它是索引0。有时我仍然会得到一个排序为0 3 0或无序的输出。上半部分指的是最高适合度。好的,那么您是否将列表分配回一个变量(我假设您的实际代码中不只是有print
)<代码>排序无法正常工作,因此您需要orgs=sorted(orgs,key=sum,reverse=True)
。换句话说,除非这样做,否则排序永远不会起作用,并且任何已排序的子列表当前都是一致的。orgs=已排序(orgs,key=sum,reverse=True)这样的打印orgs?如果我输入4和2,则适合度仍然是1、1、0、1,您需要查看“列表切片”以获得列表的一半。PEP8是Python的格式指南,它特别建议关键字参数在=
两边都没有空格。它不会改变功能。您的第一个调用端口应该调查您的排序问题。sorted
将为您提供按子列表总和升序排序的外部列表。您可能希望排序(orgs,key=sum,reverse=True)
-这取决于您如何定义“上半部分”,我假设它是索引0。有时我仍然会得到一个排序为0 3 0或无序的输出。上半部分指的是最高适合度。好的,那么您是否将列表分配回一个变量(我假设您的实际代码中不只是有print
)<代码>排序无法正常工作,因此您需要orgs=sorted(orgs,key=sum,reverse=True)
。换句话说,除非这样做,否则排序永远不会起作用,并且任何已排序的子列表当前都是一致的。orgs=已排序(orgs,key=sum,reverse=True)这样的打印orgs?如果我输入4和2,则适合度仍然是1、1、0、1,您需要查看“列表切片”以获得列表的一半。PEP8是Python的格式指南,它特别建议关键字参数在=
两边都没有空格。它不会改变功能。您的第一个呼叫端口应该是调查您的排序问题。