python列表索引超出范围 等于啥_python - IndexError:列表分配索引超出范围,Python

我正在尝试实现功能。它的工作方式应该是这样的:

它需要两个列表。

标记一些索引,最好居中。

父母双方都切换标记索引。

其他索引按顺序转到其父元素。

如果该父元素中已经存在相同的元素,则它将映射并检查同一元素在其他父元素的位置并到达那里。import random

def pm(indA, indB):

size = min(len(indA), len(indB))

c1, c2 = [0] * size, [0] * size

# Initialize the position of each indices in the individuals

for i in range(1,size):

c1[indA[i]] = i

c2[indB[i]] = i

crosspoint1 = random.randint(0, size)

crosspoint2 = random.randint(0, size - 1)

if crosspoint2 >= crosspoint1:

crosspoint2 += 1

else: # Swap the two cx points

crosspoint1, crosspointt2 = crosspoint2, crosspoint1

for i in range(crosspoint1, crosspoint2):

# Keep track of the selected values

temp1 = indA[i]

temp2 = indB[i]

# Swap the matched value

indA[i], indA[c1[temp2]] = temp2, temp1

indB[i], indB[c2[temp1]] = temp1, temp2

# Position bookkeeping

c1[temp1], c1[temp2] = c1[temp2], c1[temp1]

c2[temp1], c2[temp2] = c2[temp2], c2[temp1]

return indA, indB

a,b = pm([3, 4, 8, 2, 7, 1, 6, 5],[4, 2, 5, 1, 6, 8, 3, 7])

错误:

in pm

c1[indA[i]] = i

IndexError: list assignment index out of range

最佳答案

不知道您的代码中是否还有其他错误(我没有运行它),但这是对此的解释。在Python(与其他大多数语言一样)中,列表(更精确的序列)索引基于0:>>> l = [1, 2, 3, 4, 5, 6]

>>>

>>> for e in l:

... print(e, l.index(e))

...

1 0

2 1

3 2

4 3

5 4

6 5

>>>

>>> l[0]

1

>>> l[5]

6

>>> l[6]

Traceback (most recent call last):

File "", line 1, in

IndexError: list index out of range

总结您的问题:

您的indA和indB列表各有6个元素([1..6])及其索引:[0..5]

您的c1和c2列表也有6个元素(索引也为[0..5])

但是,您使用的是#1中的值。作为#2列表中的索引,而值6是一个问题,因为没有这样的索引

要解决您的问题,您应该使用有效的索引值。要么:

在indA和indB中有适当的值(这是我选择的值):

a, b = pmxCrossover([0, 3, 1, 2, 5, 4], [4, 0, 2, 3, 5, 1])

减去1,无论遇到indA或indB用作索引的值:

c1[indA[i] - 1] = i

作为一般建议:每当遇到错误时,请在出现故障的行之前添加打印语句(从中打印(部分)内容),这可能会为您提供线索,从而可以自己解决问题。

@ EDIT0

发布原始代码(略有修改的版本),并进行索引转换:

在算法之前:(从每个元素中减去1)具有有效索引

在算法之后:加1返回基于1的索引

code00.py:

#!/usr/bin/env python3

import sys

import random

def pmx_crossover(ind_a, ind_b):

size = min(len(ind_a), len(ind_b))

c1, c2 = [0] * size, [0] * size

# Initialize the position of each indices in the individuals

for i in range(1, size):

c1[ind_a[i]] = i

c2[ind_b[i]] = i

# Choose crossover points

crosspoint1 = random.randint(0, size)

crosspoint2 = random.randint(0, size - 1)

if crosspoint2 >= crosspoint1:

crosspoint2 += 1

else: # Swap the two cx points

crosspoint1, crosspointt2 = crosspoint2, crosspoint1

# Apply crossover between cx points

for i in range(crosspoint1, crosspoint2):

# Keep track of the selected values

temp1 = ind_a[i]

temp2 = ind_b[i]

# Swap the matched value

ind_a[i], ind_a[c1[temp2]] = temp2, temp1

ind_b[i], ind_b[c2[temp1]] = temp1, temp2

# Position bookkeeping

c1[temp1], c1[temp2] = c1[temp2], c1[temp1]

c2[temp1], c2[temp2] = c2[temp2], c2[temp1]

return ind_a, ind_b

def main():

#initial_a, initial_b = [1, 2, 3, 4, 5, 6, 7, 8], [3, 7, 5, 1, 6, 8, 2, 4]

initial_a, initial_b = [1, 4, 2, 3, 6, 5], [5, 1, 3, 4, 6, 2]

index_offset = 1

temp_a = [i - index_offset for i in initial_a]

temp_b = [i - index_offset for i in initial_b]

a, b = pmx_crossover(temp_a, temp_b)

final_a = [i + index_offset for i in a]

final_b = [i + index_offset for i in b]

print("Initial: {0:}, {1:}".format(initial_a, initial_b))

print("Final: {0:}, {1:}".format(final_a, final_b))

if __name__ == "__main__":

print("Python {0:s} {1:d}bit on {2:s}\n".format(" ".join(item.strip() for item in sys.version.split("\n")), 64 if sys.maxsize > 0x100000000 else 32, sys.platform))

main()

print("\nDone.")

输出(一种可能性(由于random.randint)):

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058424002]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" code00.py

Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] 64bit on win32

Initial: [1, 4, 2, 3, 6, 5], [5, 1, 3, 4, 6, 2]

Final: [1, 3, 2, 4, 6, 5], [5, 1, 4, 3, 6, 2]

Done.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬取汽车之家_python爬取 汽车之家(汽车授权经销商)

一:爬虫的目标:打开汽车之家的链接:https://www.autohome.com.cn/beijing/,出现如下页面我们的目标是点击找车,然后出现如下图我们要把图中的信息抓取到二:实现过程我们选择 宝马5系 然后点击找车注意宝马…

python跨目录调用_python 跨目录访问文件

1.同级、同目录的文件之间的访问有这样一个目录结构假如,in_A.py 这个文件想调用 hello_world.py 中的函数怎么办呢? --->>> import只需在 in_A.py 中 写入importhello_worldhello_world.functions()这样就可以访问啦,什么原理呢&a…

Java 调用 Caffe_解决 free(): invalid pointer: 0x00000000019ff700 运行时报错(caffe)(libtool使用)...

编译成功,运行时报错:在使用 pytorch or tensorflow or caffe 时,都可能存在这个问题:*** Error in xxx: free(): invalid pointer: 0x00000000020663b0 ***很可能是缺少libtcmalloc库解决方法1:apt-get安装libtcmallo…

unity 世界坐标间角度_Unity学习笔记—本地坐标转世界坐标

核心用到的方法就是transform.TransformPoint( )这个方法的返回值就是Vector3类型的世界坐标,transform就是相对的物体,括号里的就是相对这个transform的本地坐标,比方说我现在的位置吧,知道我相对于我的邻居的坐标:Pos1&#xff…

python访问序列元素的编号用什么括起来_python-重新编号数组中元素的有效方法...

我是python的新手,正在尝试实现一种遗传算法,但需要其中一项操作的代码方面的帮助.我是这样提出问题的:>每个人我都由一串M个整数表示> I中的每个元素e取值从0到N> 0到N之间的每个数字都必须在I中至少出现一次> e的值并不重要,只要每个唯一值元素采用相…

java 下载代码_实现文件下载的java代码

实现文件下载的java代码//这是实现下载类(servlet),详细思路代码例如以下://也可连接数据库package com.message;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class FileDownServlet extends HttpS…

webcomponents安装了没有用_Web Components 入门实例教程

来源 | http://www.ruanyifeng.com/blog/2019/08/web_components.html组件是前端的发展方向,现在流行的React和Vue都是组件框架。谷歌公司由于掌握了Chrome浏览器,一直在推动浏览器的原生组件,即Web组件API。部分第三方框架,原生组…

虹软java接摄像头_虹软人脸识别SDK(java+linux/window) 初试

虹软人脸识别全平台demo调用—快速上手之服务端Windows篇demo名称:ArcFace 2.2 Windows(86) Demo [C]一 环境配置:1) 安装VS2013环境安装包(vcredist_x86_vs2013.exe)2) 从官网(http://www.arcsoft.com.cn/ai/arcface.html)申请sdk,下载对应的…

python中re_Python中re(正则表达式)模块学习

今天学习了Python中有关正则表达式的知识。关于正则表达式的语法,不作过多解释,网上有许多学习的资料。这里主要介绍Python中常用的正则表达式处理函数。re.matchre.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个…

java ee 上传文件_17.《JavaEE 学习笔记》Servlet 上传文件

功能介绍:利用 Servlet 和表单提交,选择本地文件上传到服务器。上传的文件可以是文本文件或图像文件或任何文档,不能是文件夹。需要引入的 jar 文件:commons-fileupload-1.3.2、commons-io-2.5.jar。下载链接:将下载好…

spark python 上传代码包_使用 Livy Rest API 提交 spark 批量任务 (jar,Python, streaming)...

Livy是一个开源的REST 接口,用于与Spark进行交互,它同时支持提交执行代码段和完整的程序。image.pngLivy封装了spark-submit并支持远端执行。启动服务器执行以下命令,启动livy服务器。./bin/livy-server这里假设spark使用yarn模式&#xff0c…

java中可以改变引用的指向吗_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...

大家讲道理2017-04-17 15:30:345楼是时候展现一下我的JAVA基础知识了,2333。我按照执行顺序给你写注释好了。Person p1 new Person(10);//创建了一个对象//p1.age10;modify(p1);//modify函数传参,创建了一个在modify函数里面的局部变量p//你应该明白p是…

qpython3怎样安notebook_Windows下基于Python3安装Ipython Notebook(即Jupyter)。python –m pip install XXX...

1、安装Python3.x,注意修改环境变量path(追加上python安装目录,如:D:\Program Files\Python\Python36-32)2、查看当前安装的第三方包:python –m pip list3、安装IPython:python –m pip install ipython[all]4、安装其…

java 循环查询list_Java用list储存,遍历,查询指定信息过程详解

需求说明实现思路见代码注释代码内容使用list储存,遍历,查询,删除import java.util.ArrayList;import java.util.List;/*** auther::9527* Description: 第七题* program: 多线程* create: 2019-08-09 23:39*/public class Sevent…

python教学视频a_2019何老师一个月带你玩转Python分布式爬虫实战教程视频(视频+源码)...

├─章节1-爬虫前奏(官网免费)│001.爬虫前奏_什么是网络爬虫.mp4│002.爬虫前奏_HTTP协议介绍.mp4│003.爬虫前奏_抓包工具的使用网络请求.mp4│├─章节2-网络请求│1_urlopen函数用法.mp4│2_urlretrieve函数用法.mp4│3_参数编码和解码函数.mp4│4urlparse和urlsplit函数用…

mysql 主从二进制日志_Mysql-8 配置主从复制(基于二进制日志)

1. 实验环境SystemIPHostCentOS 7.4.1708192.168.100.101masterCentOS 7.4.1708192.168.100.102slave2. 安装MySQL83. 配置主从复制要想将主节点配置为使用基于二进制日志的复制,必须确保启用了二进制日志记录,并建立唯一的服务器ID[rootmaster ~]# cat …

python循环10次1001python循环10次_Python循环题怎么做?

知乎视频​www.zhihu.com虽然这题目很简单, 穷举的运算量很小, 但是最好还是要动点脑筋, 这样才有乐趣.二位数 三位数 四位数很明显, 这个三位数是9开头的, 又因为是回文数, 那么这个三位数是"9a9", 其中a是未知数.很明显, 这个四位数的1开头的, 又因为是回文数, 那…

java线程知识梳理_Java多线程——多线程相关知识的逻辑关系梳理

1 学习多线程知识的根本目标多线程知识的根本目标是:设计稳健的并发程序。当然,本文无法回答这个实践性很强的问题(这与具体的业务相关,涉及到具体的策略),本文主要阐述相关知识之间的关系,希望初学者不要迷失在多线程…

低代码开发平台_低代码开发平台系列:6、低代码是编程技术发展大势所趋

一、低代码是一种编程技术低代码是快速开发工具/技术的一种,属于软件开发/编程工具/技术领域,主要应用于企业软件开发领域。借助低代码工具,使用者无需编码即可实现企业软件系统常见功能的交付;少量编码扩展更多功能,相…

acm教程 java版_ACM之java速成 (转)

//这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目。//1. 输入:// 格式为:Scanner cin new Scanner (…