鱼C论坛

 找回密码
 立即注册
查看: 1788|回复: 6

[已解决]'NoneType'??????!! + 索引值的相关问题

[复制链接]
发表于 2018-8-6 14:54:06 | 显示全部楼层 |阅读模式

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

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

x
一、问:如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
标准答案是:list1.insert(0, list1.pop())


但是我没想到pop方法,于是我是这样写的:
  1. >>> list1 = [0,1,2,3]
  2. >>> list1 = (list1[0:3]).insert(0,list1[3])
  3. >>> list1
  4. >>>
复制代码

输入命令,没有报错,但出乎意料的是 当我输入命令list1 打印出列表时候,什么都没有。连一个空列表都不是。
于是我用命令 type(list1) 打印出类型.
  1. >>> type(list1)
  2. <class 'NoneType'>
复制代码


'NoneType'??????!! 这是什么鬼.

还是不甘心,于是我将这个式子进行分解操作,理所应当的报错了。(因为索引值3不存在)
  1. >>> list1 = [0,1,2,3]
  2. >>> list1 = list1[0:3]
  3. >>> list1
  4. [0, 1, 2]
  5. >>> list1 = list1.insert(0,list1[3])
  6. Traceback (most recent call last):
  7.   File "<pyshell#25>", line 1, in <module>
  8.     list1 = list1.insert(0,list1[3])
  9. IndexError: list index out of range
复制代码


二、索引值越界这让我想到了另外一个问题。
  1. >>> number
  2. [1, 2, 3, 4, 5, 6]
  3. >>> number.insert(6,7)
  4. >>> number
  5. [1, 2, 3, 4, 5, 6, 7]
  6. >>> number.insert(8,8)
  7. >>> number
  8. [1, 2, 3, 4, 5, 6, 7, 8]
  9. >>> number.insert(8,9)
  10. >>> number
  11. [1, 2, 3, 4, 5, 6, 7, 8, 9]
  12. >>> number.insert(88888,10)
  13. >>> number
  14. [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
复制代码

在列表最后添加一个数可以用append()方法,但是我就喜欢用insert()方法。各位鱼油,你看哪怕我的索引值写成8888,也不会报错。
我还想我索引值写8的时候没报错,会不会把8这个位置的索引值给占用了,所以会有insert(8,8);insert(8,9);然而并不会报错。emmmm


最佳答案
2018-8-6 15:08:07
1. 按你的思路应该是:
>>> list1 = [0,1,2,3]
>>> list2 = list1[0:3]
>>> list2.insert(0,list1[3])
>>> list2
[3, 0, 1, 2]
2. 抄录一段话:https://www.cnblogs.com/huangbiquan/p/7863056.html
场景1:index=0时,从头部插入obj
场景2:index > 0 且 index < len(list)时,在index的位置插入obj
场景3:当index < 0 且 abs(index) < len(list)时,从中间插入obj,如: -1 表示从倒数第1位插入obj; -2 表示从倒数第1位插入obj
场景4:当index < 0 且 abs(index) >= len(list)时,从头部插入obj
场景5:当index >= len(list)时,从尾部插入obj
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-6 15:04:47 | 显示全部楼层
一 因为insert函数是对列表自身操作,返回值为None

二 如果insert第一个参数越界,应该是默认放到最后
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 15:08:07 | 显示全部楼层    本楼为最佳答案   
1. 按你的思路应该是:
>>> list1 = [0,1,2,3]
>>> list2 = list1[0:3]
>>> list2.insert(0,list1[3])
>>> list2
[3, 0, 1, 2]
2. 抄录一段话:https://www.cnblogs.com/huangbiquan/p/7863056.html
场景1:index=0时,从头部插入obj
场景2:index > 0 且 index < len(list)时,在index的位置插入obj
场景3:当index < 0 且 abs(index) < len(list)时,从中间插入obj,如: -1 表示从倒数第1位插入obj; -2 表示从倒数第1位插入obj
场景4:当index < 0 且 abs(index) >= len(list)时,从头部插入obj
场景5:当index >= len(list)时,从尾部插入obj
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-6 15:26:31 | 显示全部楼层
冬雪雪冬 发表于 2018-8-6 15:08
1. 按你的思路应该是:
>>> list1 = [0,1,2,3]
>>> list2 = list1[0:3]

蟹蟹,但我有一点没明白 返回类型为NoneType 是怎么一回事?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 15:29:01 | 显示全部楼层
好きだ 发表于 2018-8-6 15:26
蟹蟹,但我有一点没明白 返回类型为NoneType 是怎么一回事?

append,pop,insert等都是对原列表的操作,没有返回值,
list2 = list1.append(1)
则list2是None
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-6 15:43:00 | 显示全部楼层
冬雪雪冬 发表于 2018-8-6 15:29
append,pop,insert等都是对原列表的操作,没有返回值,
list2 = list1.append(1)
则list2是None

嗯嗯 明白啦 感谢耐心的回答。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-6 15:43:35 | 显示全部楼层
BngThea 发表于 2018-8-6 15:04
一 因为insert函数是对列表自身操作,返回值为None

二 如果insert第一个参数越界,应该是默认放到最后

蟹蟹啦 感谢耐心的回答。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-28 06:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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