列表的长度/索引/切片

目录

【列表长度】 

【列表索引】 

列表的【切片】 ​编辑

【正向切片】

【反向切片】

【特殊案例/特性  ----- 反直觉情况】

特性Ⅰ

特性Ⅱ

特性Ⅲ-特殊  特性Ⅱ的延伸,方向问题

我的建议: 


【列表长度】 

关键:len(列表名)

# 列表的长度—len(列表)
ls = [1, 2, 3, 4, 5]
print(len(ls))                #输出5

【列表索引】 

用法和JAVA一致,即:在变量后面加上中括号

在JAVA和C++中,这属于数组,而python也能这么表示对应的位置,例:

# 格式:变量名[位置编号]
cars = ["BYD", "BMW", "AUDI", "TOYOTA"]
print(cars[0])
print(cars[1])
print(cars[-1])
print(cars[-2])

# 注意:正向索引从0开始,反向索引从-1开始。


列表的【切片】 

假如说列表是面包,那么列表也能分成很多分的小面包吧

认识切片:[头:尾:步长]

注意事项:在绝大部分正常情况,不写参数的话,默认头是最前面(默认为0或-1),尾是最后面,步长是1(也默认为1),并且输出是含头不含尾

【正向切片】

正向的头默认是0的,所以为了方便观看,我的test从0开始的

# 例如设test=[0,1,2,3,4,5]

print(test[1:5:1])      # 输出[1, 2, 3, 4]
print(test[1:5:2])      # 输出[1, 3]
print(test[3:])         # 输出[3, 4, 5]
print(test[:5])         # 输出[0, 1, 2, 3, 4]
print(test[::])         # 输出[0, 1, 2, 3, 4, 5]

【反向切片】

反向的头默认是-1的,所以为了方便观看,我的test2从-1开始的

# 例如设test2=[-6,-5,-4,-3,-2,'-1(标记)']

print(test2[-2:-5:-2])      # 输出[-2, -4]
print(test2[::-1])          # 全部逆序输出['-1(标记)', -2, -3, -4, -5, -6]

# 标记是我后面将特殊案例用的,可以将-1和列表里的-1区分开来,有效避免是系统返回的值-1,如果不打算深究则可以先不理


【温馨提示】以上仅为过家家,开始来特殊案例和本身不该让程序员头疼的特性

 上面我特地提了一嘴,是绝大部分情况下,因为很少涉及这种情况,但并不排除遇不到这种问题

【特殊案例/特性  ----- 反直觉情况】
特性Ⅰ 
# 特性Ⅰ
# 有且仅当结束和步长为负数时,缺省的开始才默认为-1,即:
# 开始和步长决定切片方向,也决定结束的值(0或-1)
print(test2[:-4:-1])    # 有且仅当结束和步长为负数时,开始缺省才默认为-1
print(test2[-2::1])     # 有且仅当开始为负数且步长缺省(默认为1)时,结束才默认-1



# 但结束和步长不能决定切片方向,也不能决定开始的值,开始的值依旧为0
print(test2[:-4:1])     # 开始默认为0
print(test2[:-4:])      # 开始默认也为0、步长默认为1

特性Ⅱ

 # 特性Ⅱ
# 开始和步长决定结束方向与默认值,若开始->结束的方向与步长方向不同则会出现2种不合理情况
# ①缺省直接输出列表最后一个值
# ②不缺省输出空列表[]
# 其他情况一律默认开始为0,步长为1
# 在顺逆均不一致的情况下
 

print(test2[:4:-1])    

# 参数缺省的情况下,结束为正参数(4),开始缺省,切片整体呈现顺序(-1),步长又为逆序,直接返回最后一个数-1

print(test2[0:4:-1])    

# 在参数确定(不缺省)的情况下,开始为0结束为4属于顺序,步长逆序,返回一个空列表

# 同理
 

print(test2[-1::1])    

# 参数缺省的情况下,开始为负参数(-1),结束缺省,切片整体呈现逆序(1),步长又为顺序,直接返回最后一个数-1
 

print(test2[-1:0:1])    

# 在参数确定(不缺省)的情况下,开始为-1结束为0属于逆序,步长顺序,返回一个空列表

 运行结果

(特殊)特性Ⅲ  他们应该是属于特性Ⅱ的延伸,方向问题,值很奇怪

应该是属于特性Ⅱ的延伸,方向问题,值很奇怪

# (特殊)特性Ⅲ  他们应该是属于特性Ⅱ的延伸,方向问题,值很奇怪

print(test2[-1::])      # 输出['-1(标记)']
print(test2[0::-1])     # 输出[-6]

# 因为与下面两个完全不一样,默认值肯定对得上
print(test2[-1:-1:])
print(test2[0:0:-1])

运行结果

我的建议: 

特殊案例/特性的问题,我自己都觉得很无脑  不可思议,这已经不算符合常理了,所以我建议三个特性可以知道有这么回事就好,不要再去深究了,很浪费时间的,全部都枚举了一遍可能了,你如果再去这个地方捣鼓真的不值得,你只要好好学正向切片反向切片即可,最主要的是,必要条件的参数尽量写不要空着,这样就可以尽最大可能的保证不会关联到特性Ⅰ/Ⅱ/Ⅲ,特性就是因为空着和顺序不统一才会出现的。

给自己对切片留个大概印象,开始到结束的方向一定要和步长的方向一致,开始默认  正向为0  反向为-1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值