内容训练
Topic source报错原因我感觉是因为***二班名单*是一个包含了list的tuple,用pop进行删除后等于是对该tuple进行了修改,一旦修改就等于把它的指向改变了,这是规则上不允许的,而#名字'小红'更改为'红红'**并没有改变该tuple的指向(文中末尾有讲)。
以此类推,tuple只能修改也不能添加,为验证这个想法,设新问题:#将'大大'添加进索引号1的位置,即***二班名单.insert(1,'大大')***,一样报错,算是验证了自己的想法。
报错不仅仅是因为tuple不能被修改,其二是你理解错了pop()函数的概念,正确的代码应该是:
二班名单=('莉莉','晴晴','圆圆',['小明','小红',['小粉','小鬼'],'壮壮'])
二班名单[3][2].pop()
这样才是删除'小鬼'这个元素
二班名单[3][2].pop()
这个格式是错误的,刚在 VS 里试了下。如果想要修改 tuple 里的 list 里的任何元素,应该用这个格式:
x[index of the list].inser(index of the value, 'y')
x[index of the list].pop(index of the value)
x[index of the list].append('y')
x[index of the list].remove('y')
x[index of the list].reverse()
所以上面
二班名单[3][2].pop()
应该是
二班名单[3].pop(2)
报错是因为pop函数的用法错了,上面说了,tuple里面的元素不可以修改,但是如果tuple中的元素本身就可以修改,那么tuple里面加了个list,list里面的元素是可变的,但不管list里面的元素怎么变,list这个元素是始终不变的。
而上面的报错是:AttributeError: 'tuple' object has no attribute 'pop'
翻译成中文就是:元组”对象没有属性“pop
大概意思就是pop函数里面还差参数,而pop函数在tuple中的用法是像上面那个老哥说的那样。
所以最终的写法应该是:
二班名单[3][2].pop(1)
- 1
跑得快
练习1、
班级名字=['小明','小红','小白','小丽','小黑',['小粉','小鬼']]
#打印名字'小鬼'
print(班级名字[5][1])
print(班级名字[-1][-1])
#集合最后加入名字'小刚'
班级名字.append('小刚')
#在集合内的集合里的,第一位置加入名字'白白'
班级名字[5].insert(0,'白白')
#删除名字'小黑'
班级名字.pop(4)
#把名字'小鬼',替换为'大鬼'
班级名字[4][2]='大鬼'
练习2、
二班名单=('莉莉','晴晴','圆圆',['小明','小红',['小粉','小鬼'],'壮壮'])
#名字'小红'更改为'红红'。
二班名单[3][1]='红红'
#删除名字'小鬼';
二班名单.pop([3][2][1])
#报错 AttributeError: 'tuple' object has no attribute 'pop'
#那么我们试试换一种思路,把名字‘小黑’用*替代,借此来达到删除目的。
二班名单[3][2][1]='*'