列表有关

来源:互联网 发布:保险师软件下载 编辑:程序博客网 时间:2024/06/05 11:33

笔记:

C语言中的数组,要求数组中的元素必须都是同一类型,但是Python中不直接定义元素的类型,所以用到列表,列表中的元素可以是混合的类型。
1、向列表中添加元素, 向列表增加元素有哪些方法(设列表的名称为member):
A. append():member.append(要添加的元素),注意每次只能添加一个元素,被添加的元素自动添加到列表末尾
B. extend():member.extend([元素1,元素2]),以列表的形式追加新元素到原列表,每次可以添加多个元素,被添加的元素自动添加到列表末尾
C. insert():member.insert(i,x),i表示要追加的位置(注意起始位置为0),x表示被插入的元素

>>> list1 = [1,2,3,4,5]>>> list2 = ["a","b","c","d"]>>> for i in range(len(list2)):        list1.insert(2*i+1,list2[i])>>> list1[1, 'a', 2, 'b', 3, 'c', 4, 'd', 5]

如何一次打印两个元素??
方法1:

>>> temp = [1, 'a', 2, 'b', 3, 'c', 4, 'd', 5 , 'e']>>> for i in range(len(temp)):    if i %2 ==0:        print(temp[i],temp[i+1])1 a2 b3 c4 d5 e

方法2:

>>> count = 0>>> while count < len(temp):    print(temp[count],temp[count+1])    count +=21 a2 b3 c4 d5 e

2、从列表删除元素:
remove():member.remove(‘元素名’)(注意:元素必须存在于列表中,否则会报错)
del:del member[索引值]
特别的,删除整个列表:del member
pop():弹栈,member.pop(索引值)

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

3、列表分片(slice)
member[1:3]:原列表member中索引值1~3的元素组成新的列表
member[1:]:索引值从1开始到最后一个元素
member[:]:原列表所有元素,特别的member2 = member[:]完成列表的拷贝

步长可以是负数,改变方向(从尾部开始向左走):

>>> list1[::-2]  [8, 9, 3]  

4、列表的小伙伴们:
——list.reverse():翻转列表
——list.sort():按照指定的方式对列表成员排序,未指定则从小到大排列
特别的:sort(reverse=False),默认为False
——list.index(x) :返回元素X所在的位置即索引
——list.count(x) : 返回元素X在列表中出现的次数

5、列表的常用操作符:比较;逻辑;连接(+);重复;成员关系
6、 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()
7、最重要的之一:列表推导式

参考: http://blog.csdn.net/junwei0206/article/details/44737363

列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:
[有关A的表达式 for A in B]

[ i*i for i in range(10) ] 
问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。[python] view plain copylist1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]  

8、最后一个问题
课堂上老师说可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢?

参考:http://blog.csdn.net/junwei0206/article/details/44734171

论坛参考答案:(比较长,有价值)千万不可以!
好的,为了大家都可以弄明白这个【必须理解】的概念,我啰嗦一下:
上节课我们提到使用分片创建列表的拷贝,例如:
[python] view plain copy

list1 = [1, 3, 2, 9, 7, 8]
list2 = list1[:]
list2
[1, 3, 2, 9, 7, 8]
list3 = list1
list3
[1, 3, 2, 9, 7, 8]
看上去貌似一样的,对吧?但事实上呢?我们利用列表的一个小伙伴做下修改,大家看一下差别:
[python] view plain copy
list1.sort()
list1
[1, 2, 3, 7, 8, 9]

看到吧,我们的list1已经从小到大排了个序,那list2和list3呢?
[python] view plain copy

list2
[1, 3, 2, 9, 7, 8]

可以看到我们使用分片的方式得到的list2很有原则、很有格调,并不会因为list1的改变而改变,这个原理我待会儿跟大家说,我们接着看下list3:
[python] view plain copy

list3
[1, 2, 3, 7, 8, 9]
大家可以看到了,真正的汉奸、墙头草是list3,Ta跟着list1改变了,这是为什么呢?
不知道大家还记不记得我们在讲解变量的时候说过,Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪,呃,我还是给大家伙画个图好。
这里写图片描述

测试题:注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。[python] view plain copyold = [1, 2, 3, 4, 5]  new = old  old = [6]  print(new)  如果不上机操作,你觉得会打印什么内容?答:1,2,3,4,5
原创粉丝点击