python 系统学习笔记(四)--list
1、列表
列表是一种用于保存有序元素集合的数据结构,即你可以在列表中存储元素序列。考虑一个购物清单,上面有你需要购买的物品列表,只不过你可能希望以分号分隔他们而到Python变成了逗号。
列表元素被包含在方括号中,这样Python就会才会明白你指定的是一个列表。一点列表创建完毕,我们可以对其元素进行添加,删除和搜索。正是因为可以执行添加和删除操作,我们将列表称作可变类型,即这种类型可以被修改。
对象和类的快速简介
列表是使用对象和类的一个例子。当我们对变量i赋值时,例如赋值5,这相当于创建一个Int类(类型)的对象(实例),你可以参看help(int)来更好的理解它。
一个类同样可以拥有方法,即函数,而他们只能应用与这个类。并且只有当你拥有一个类的对象时才能使用这些功能。例如,Python为列表提供了一个append方法允许我们将元素添加到列表的表尾。如,mylist.append(‘an item’)将字符串添加到列表mylist的尾部。注意,要用点号访问对象方法。
一个类还可以拥有字段,而字段只不过是专门应用与一个类的变量而已。当你拥有对应类的对象时就能使用这些变量了。字段同样利用点号访问,如,mylist.field。
1、list:列表(即动态数组,C++标准库的vector,但可含不同类型的元素于一个list中)
a = ["I","you","he","she"] #元素可为任何类型。
下标:按下标读写,就当作数组处理
以0开始,有负下标的使用
0第一个元素,-1最后一个元素,
-len第一个元素,len-1最后一个元素
取list的元素数量
len(list) #list的长度。实际该方法是调用了此对象的__len__(self)方法。
创建连续的list
L = range(1,5) #即 L=[1,2,3,4],不含最后一个元素
L = range(1, 10, 2) #即 L=[1, 3, 5, 7, 9]
list的方法
L.append(var) #追加元素
L.insert(index,var)
L.pop(var) #返回最后一个元素,并从list中删除之
L.remove(var) #删除第一次出现的该元素
L.count(var) #该元素在列表中出现的个数
L.index(var) #该元素的位置,无则抛异常
L.extend(list) #追加list,即合并list到L上
L.sort() #排序
L.reverse() #倒序
list 操作符:,+,*,关键字del
a[1:] #片段操作符,用于子list的提取
[1,2]+[3,4] #为[1,2,3,4]。同extend()
[2]*4 #为[2,2,2,2]
del L[1] #删除指定下标的元素
del L[1:3] #删除指定下标范围的元素
list的复制
L1 = L #L1为L的别名,用C来说就是指针地址相同,对L1操作即对L操作。函数参数就是这样传递的
L1 = L[:] #L1为L的克隆,即另一个拷贝。
list comprehension
[ <expr1> for k in L if <expr2> ]
定义list
li=["a","b","mpilgrim","z","example"]
向list中增加元素
li.append("new")
li.insert(2,"new")
li.extend(["two","elements"])
extend(扩展) 与append(追加) 的差别
List 运算符
list 的分片 (slice)
您可以通过指定 2 个索引得到 list的子集,叫做一个 “slice” 。返回值是一个新的 list,它包含了 list 中按顺序从第一个 slice 索引 (这里为 li[1]) 开始,直到但是不包括第二个 slice 索引 (这里为 li[3]) 的所有元素。
如果一个或两个 slice 索引是负数,slice 也可以工作。如果对您有帮助,您可以这样理解:从左向右阅读 list,第一个 slice 索引指定了您想要的第一个元素,第二个 slice 索引指定了第一个您不想要的元素。返回的值为在其间的每个元素。
List 从 0 开始,所以 li[0:3] 返回 list 的前 3 个元素,从 li[0] 开始,直到但不包括 li[3]。
Slice 简写
如果左侧分片索引为 0,您可以将其省略,默认为 0。所以 li[:3] 同 “list 的分片 (slice)” 的 li[0:3] 是一样的。
同样的,如果右侧分片索引是 list 的长度,可以将其省略。所以 li[3:] 同 li[3:5] 是一样的,因为这个 list 有 5 个元素。
请注意这里的对称性。在这个包含 5 个元素的 list 中,li[:3] 返回前 3 个元素,而 li[3:] 返回后 2 个元素。实际上,li[:n] 总是返回前 n 个元素,而 li[n:] 将返回剩下的元素,不管 list 有多长。
如果将两个分片索引全部省略,这将包括 list 的所有元素。但是与原始的名为 li 的 list 不同,它是一个新 list,恰好拥有与 li 一样的全部元素。li[:] 是生成一个 list 完全拷贝的一个简写。
检索列表的值,四种方式:in、not in、count、index,后两种方式是列表的方法。
示例列表:a_list = ['a','b','c','hello']:
判断值是否在列表中,in操作符:
'a' in a_list<wbr>//判断值a是否在列表中,并返回True或False</wbr>
判断值是否不在列表,not in操作符:
'a' not in a_list<wbr><wbr>//判断a是否不在列表中,并返回True或False</wbr></wbr>
统计指定值在列表中出现的次数,count方法:
a_list.count('a')<wbr>//返回a在列表中的出现的次数</wbr>
在 list 中搜索
查看指定值在列表中的位置,index方法:
a_list.index('a')<wbr><wbr>//返回a在列表中每一次出现的位置,默认搜索整个列表<br>
a_list.index('a',0,3)<wbr>//返回a在指定切片内第一次出现的位置</wbr></wbr></wbr>
使用join链接list成为字符串
params={"server":"mpilgrim","database":"master","uid":"sa","pwd":"secret"}
";".join(["%s=%s"%(k,v)fork,vinparams.items()])
输出'pwd=secret;database=master;uid=sa;server=mpilgrim
join只能用于元素是字符串的list;它不进行任何的类型强制转换。连接一个存在一个或多个非字符串元素的list将引发一个异常。
利用list 传参数
def a(b,c):
print b,c
a(1,2)
a(*[1,2])
a(**{'b':1,'c':2}) #字典
list的映射解析
li=[1,9,8,4]
li=[elem*2foreleminli]
列表过滤
li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
print [elem for elem in li if len(elem) > 1]
print [elem for elem in li if elem != "b"]
print [elem for elem in li if li.count(elem) == 1]
练习题
1.删除list里面的重复元素,并对其排序,然后对里面元素乘以2 并去掉大于10的元素
输入input1=[1,3,5,1,7] input2=[2,3,8] input3=[3,4]
要求输出 b=[2,4,6,8,10] ,其过程要求用函数实现 参考上一章可变参数可变(VarArgs)参数
举例 一下是一个简单的求和
sum=0 a=[1,2,3,4] def uniq(*Nums): global sum for num in Nums: sum=num+sum uniq(*a) print sum
提示过程,传入元素为list的list 然后遍历list 进行合并......
上一篇: python 练习题