Python中二维数据(数组、列表)索引和切片的Bug

这篇具有很好参考价值的文章主要介绍了Python中二维数据(数组、列表)索引和切片的Bug。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一维数据索引和切片

一维数组

对于一维数据进行索引和切片操作,大家都比较熟悉通过下面代码进行实现

import numpy as np
data = np.random.randn(5)
print(data)
print(data[2:5])  #一维数组切片操作,获取索引2到4的数据
print(data[3])   #一维数组索引操作,获取索引为3的数据

Python中二维数据(数组、列表)索引和切片的Bug,Bug修改,python,bug,开发语言

一维列表

对于一维列表元组等相关结果的索引和切片操作,与一维数组类似

ls = [1, 2, 3, 4, 5]
print(ls)
print(ls[3:5]) #一维列表切片操作,获取索引2到4的数据
print(ls[3])  #一维列表索引操作,获取索引为3的数据

Python中二维数据(数组、列表)索引和切片的Bug,Bug修改,python,bug,开发语言

二维数据的索引和切片

对于二维数据的索引和切片就有一些需要注意的事项了,如果一不小心可能会出现意料之外的Bug

二维数组

import numpy as np
data = np.random.randn(55)
print(data)
print(data[1:3, 2:4])  #二维数组切片操作,获取索引1到2行2到3列的数据
print(data[3, 2])   #二维数组索引操作,获取索引为3行2列的数据
print(data[3][2])   #二维数组索引操作,获取索引为3行2列的数据
print(data[1:3])    #二维数组切片操作,获取索引为1到2行所有列的数据
print(data[:, 2:4])  #二维数组切片操作,获取索引为2到3列的所有行数据
print(data[1:3][2:4]) #想要获取1到2行和2到3列数据,单数会引发bug

Python中二维数据(数组、列表)索引和切片的Bug,Bug修改,python,bug,开发语言
上面就是二维数组索引和切片的大部分操作,对于索引来说可以使用data[3, 2]也可以使用data[3][2]操作,这两个获取的结果是一致的,那对于切片操作来说为啥data[1:3, 2:4]和操作data[1:3][2:4]不仅获取的结果不一致而且data[1:3][2:4]获取到的数据为空。对于初学者来说可能很难理解这样的情况,不知道bug的原因。但是换个索引行列data[1:3][0:2]会获得下面结果
Python中二维数据(数组、列表)索引和切片的Bug,Bug修改,python,bug,开发语言
这个情况就比较让人费解了,索引1到2行2到3列的数据获取为空,索引1到2行0到1列反而可以得到数据。问题是二维数组的大小为5x5,无论哪种索引都没超过数组范围啊。但是仔细查看索引数据data[1:3][0:2]发现得到的并不是1到2行0到1列的数据,而是1到2行所有列的数据。什么原因导致的呢?因为[1:3][0:2]这样的索引方式并不是向我们想的那样获取1到2行0到1列的数据。而是两次行索引操作,第一次获取1到2行所有列数据,数据大小为2x5,第二次获取0到1行的所有列数据。这样并没有列索引的操作,因此无法获取我们想要的数据。那为啥data[1:3][2:4]索引的数据为空呢?因为第一次行索引得到2x5大小的二维数组,第二次行索引获取2到3行的数据超出了数据大小范围,因此获得的数据为空。所以对于二维数组data[1:3][2:4]不是对相应的行列索引切片,而是进行了两次行切片。切记不要搞错,不然获取数据为空引发的bug还好解决,万一获取错误数据可能就不容易发现Bug了。
那为何进行索引操作data[3, 2]和data[3][2]都可以正常获取数据呢?(PS:要不是有这样一个索引操作,估计大家就不会使用类似的切片操作了)因为第一次行索引获得第3行数据,大小为1x5,第二次获取第3行中的第2个数据因此可以正常获取到3行2列的数据。

二维(错误)列表

Python中二维数据(数组、列表)索引和切片的Bug,Bug修改,python,bug,开发语言
对于二维列表或者元组进行索引或者切片操作,可能会引发以上Bug

    zarten = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]
    print(zarten)
    print(zarten[3][2])
    print(zarten[1:3][0:2])
    print(zarten[1:3, 2:4])  #错误切片操作
    print(zarten[3, 2])      #错误索引操作

Python中二维数据(数组、列表)索引和切片的Bug,Bug修改,python,bug,开发语言
为何二维列表或元组进行二维数组类似的索引和切片操作就会出现以上报错,因为列表和元组没有二维数据,有同学觉得上面5x5的不就是二维列表吗?其实不是,这只是个列表中的列表,并无行列区分。比如列表中每个列表的元素个数可以不同,第一个列表中可以有5个元素,第二个列表中可以有3个元素等等,因此列表、元组并不能像我们认为的二维数组那样进行行列索引、切片操作。但是如果列表中的每个列表元素个数以及数据类型都一致,可以通过将列表转换为NumPy数组进行行列索引、切片操作。

import numpy as np
data = np.array(data)

祝好~
Python中二维数据(数组、列表)索引和切片的Bug,Bug修改,python,bug,开发语言文章来源地址https://www.toymoban.com/news/detail-807711.html

到了这里,关于Python中二维数据(数组、列表)索引和切片的Bug的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【第三章 Python 机器学习入门之Series和DataFrame的创建、索引、切片、数据清洗、数据分析等】

    第一章 Python 机器学习入门之Pandas库的使用 第二章 Python 机器学习入门之NumPy库的使用 第四章 Python 机器学习入门之数据可视化 第五章 Python 机器学习入门之机器学习算法 第六章 Python 机器学习入门之实战项目 Series是一种一维数组,可以通过以下方式创建: 通过列表创建Ser

    2024年02月05日
    浏览(38)
  • 【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能

    目录 1 多层索引(MultiIndex) 1.1 创建多层索引 1.1.1 从元组创建多层索引

    2024年02月09日
    浏览(51)
  • Python 列表切片详解

         切指–将某些东西切成小块。列表切片是从 原始列表中提取列表的一部分 的过程。在列表切片中,我们将根据所需内容(如,从何处开始,结束以及增量进行切片)剪切列表。      Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。  存储对

    2023年04月08日
    浏览(27)
  • 【Python Numpy教程】切片和索引

    NumPy是Python中用于科学计算的重要库之一,它提供了多维数组对象和许多用于操作这些数组的函数。在本教程中,我们将探讨NumPy中的数组切片和索引,这是使用NumPy进行数据处理和分析时的关键概念。数组切片和索引使您能够访问、操作和修改NumPy数组的元素,对于数据处理

    2024年02月03日
    浏览(27)
  • Python中列表,元组,集合,字典哪些数据结构支持双向索引?

    在Python中,我们常用的内置数据结构有列表、元组、集合和字典。其中,只有列表和元组支持双向索引,可以通过正向索引和负向索引访问元素。而字典和集合不支持索引。 在Python中,内置的数据结构主要包括: 列表(list):有序,可变的数据集合,可以通过索引访问元素。 元组(tuple)

    2024年02月08日
    浏览(47)
  • Tensorflow2.0笔记 - Tensor的数据索引和切片

            主要涉及的了基础下标索引\\\"[]\\\",逗号\\\",\\\",冒号\\\":\\\",省略号\\\"...\\\"操作,以及gather,gather_nd和boolean_mask的相关使用方法。 运行结果:   ....

    2024年01月23日
    浏览(32)
  • 【数据分析之道-NumPy(三)】numpy切片与索引

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2023年04月09日
    浏览(28)
  • 【Python 4】列表与元组slice切片 迭代 列表生成式 生成器generator 迭代器Iterator对象

    在Python中,代码不是越多越好,而是越少越好 取一个list或tuple的部分元素是非常常见的操作 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作 L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3 如果第

    2024年02月07日
    浏览(36)
  • python二维索引转一维索引 & 多维索引转一维索引

    原博客地址:https://blog.csdn.net/qq_42424677/article/details/123011642

    2024年02月11日
    浏览(28)
  • Python中数据处理(npz、npy、csv文件;元组、列表、numpy数组的使用)

    目录 1.npz文件 2.npy文件 3.csv文件 4.列表、元组、numpy矩阵 ①列表 ②元组(不可变列表) ③Numpy数组 ③Numpy矩阵 1.npz文件 npz是python的压缩文件 ①读取文件 ② NpzFile 对象有个属性 files 可以通过它查看该压缩文件的所有文件名,通过 dataset[\\\'文件名\\\'] 来获取文件内容 ③保存为.npz文件

    2024年02月03日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包