代号3 发表于 2018-8-1 16:30:59

Python学习 对list切片的一些理解

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


编译器代码
list4=['123','sdf','12d',3,'3']
    print(list4)
    print(list4)
    print(list4)
    print('3' in list4)
    # print(3 in list4)
    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
    print(num1)
    print(type(num1))
    num2=list4
    print(num2)
    print(type(num2))
    print(type(list4))
    print(type(list4))
        结果如下

<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)
    print('3'in list4)
    print('3'in list4)
        结果如下
True
False
True
        而
list4=['123','sdf','12d',3,'3']
    print('3'in list4)
    print('3'in list4)
Traceback (most recent call last):
True
File "C:/Python/test.py", line 80, in <module>
    print('3'in list4)
TypeError: argument of type 'int' is not iterable
        说明在list中通过in进行判断需要区分元素的数据类型 在Python中‘3’同样视为字符串类型 无单字符型 也是一种列表
        4·整形数据的in判断
list4=['123','sdf','12d',3,'3']
    print(3 in list4)
结果
Traceback (most recent call last):
File "C:/Python/test.py", line 79, in <module>
    print(3 in list4)
TypeError: 'in <string>' requires string as left operand, not int
报错:在<String >”中需要字符串作为左操作数,而不是int
list4=['123','sdf','12d',3,'3']
    print(3 in list4)
结果
Traceback (most recent call last):
File "C:/Python/test.py", line 80, in <module>
    print(3 in list4)
TypeError: argument of type 'int' is not iterable
报错:类型“int”的参数不是可迭代的
结论:在list中元素类型存取是区分的 如果需要通过in获得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的打印为列表从后向前遍历去除最后一个元素,当全部省略打印时可输出列表全部
元素,同样在反向索引过界时打印为空而不会出现内存访问报错;

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




页: [1]
查看完整版本: Python学习 对list切片的一些理解