鱼C论坛

 找回密码
 立即注册
查看: 1882|回复: 0

[经验总结] Python学习 对list切片的一些理解

[复制链接]
发表于 2018-8-1 16:30:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 代号3 于 2018-8-1 23:49 编辑


编译器代码
list4=['123','sdf','12d',3,'3']
    print(list4)
    print(list4[0:2])
    print(list4)
    print('3' in list4[0])
    # print(3 in list4[3])
    print(list4[:0])
    print(list4[:1])
    print(list4[:-2])
输出结果
['123', 'sdf', '12d', 3, '3']
['123', 'sdf']
['123', 'sdf', '12d', 3, '3']
True
[]
['123']
['123', 'sdf', '12d']
过程分析
        1·建立列表并初始化 分析第3个元素-3与第四个元素-‘3’在列表中是否存储的类型有差异
  list4=['123','sdf','12d',3,'3']
    num1=list4[3:4]
    print(num1)
    print(type(num1))
    num2=list4[4:5]
    print(num2)
    print(type(num2))
    print(type(list4[3]))
    print(type(list4[4]))
        结果如下
[3]
<class 'list'>
['3']
<class 'list'>
<class 'int'>
<class 'str'>
从输出结果可知 通过切片获得的元素数据类型为list型 而通过type直接判断列表中的元素获得的列表中的元素类型是不一样的
        2·对list4进行切片 并在切片前和切片后分别打印list4  输出结果显示切片并不破坏原有列表的元素存储 而是开辟新的内存进行存储       
        3·对列表中元素进行获取判断
list4=['123','sdf','12d',3,'3']
    print('3'in list4[0])
    print('3'in list4[2])
    print('3'in list4[4])
        结果如下
True
False
True
        而
 list4=['123','sdf','12d',3,'3']
    print('3'in list4[0])
    print('3'in list4[3])
Traceback (most recent call last):
True
  File "C:/Python/test.py", line 80, in <module>
    print('3'in list4[3])
TypeError: argument of type 'int' is not iterable
        说明在list中通过in进行判断需要区分元素的数据类型 在Python中‘3’同样视为字符串类型 无单字符型 也是一种列表
        4·整形数据的in判断
 list4=['123','sdf','12d',3,'3']
    print(3 in list4[4])
结果
Traceback (most recent call last):
  File "C:/Python/test.py", line 79, in <module>
    print(3 in list4[4])
TypeError: 'in <string>' requires string as left operand, not int
报错:在<String >”中需要字符串作为左操作数,而不是int
  list4=['123','sdf','12d',3,'3']
    print(3 in list4[3])
结果
Traceback (most recent call last):
  File "C:/Python/test.py", line 80, in <module>
    print(3 in list4[3])
TypeError: argument of type 'int' is not iterable
报错:类型“int”的参数不是可迭代的
结论:在list中元素类型存取是区分的 如果需要通过in获得3的切片可写为[3]即可
        5·对省略切片的写法浅析
        正数写法:
 list4=['123','sdf','12d',3,'3']
    print(list4[:0])
    print(list4[:1])
    print(list4[:5])
    print(list4[:6])
    print(list4[:100])
结果:
[]
['123']
['123', 'sdf', '12d', 3, '3']
['123', 'sdf', '12d', 3, '3']
['123', 'sdf', '12d', 3, '3']
        从结果中可知当省略写法直接打印第一个元素即存储在0号位置的元素时需要写[:1]而非[:0],另 当切片索引结尾位置
大于切片本身大小时并未出现内存访问越界报错扔输出原列表
        负数写法:
 list4=['123','sdf','12d',3,'3']
    print(list4[:-0])
    print(list4[:-1])
    print(list4[:])
    print(list4[:-2])
    print(list4[:-4])
    print(list4[:-5])
    print(list4[:-100])
结果:
[]
['123', 'sdf', '12d', 3]
['123', 'sdf', '12d', 3, '3']
['123', 'sdf', '12d']
['123']
[]
[]
        在负数写法中,-0仍是打印为空,而-1的打印为列表从后向前遍历去除最后一个元素,当全部省略打印时可输出列表全部
元素,同样在反向索引过界时打印为空而不会出现内存访问报错;

对内存越界问题希望可以在讨论区见到更多讨论,对此处的内存分析不甚了解




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 15:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表