(ID为注释,方便后面理解)
1、Python包含6种内建的序列,list,tuple,字符串,Unicode字符串,buffer对象,xrange对象。。。现主要进行list和tuple的学习
概述:list 类似于 C语言里的数组,但又不相同, C语言里的数组是某一个是数据类型(数据类型唯一),而 list 数据类型不唯一
实例: li = [ 1, 'a', 3.45 , 10000, [1 ,5] , (1 , 5) ] 都是可以的
2、一些基本操作
(1)索引,类似 C语言的下标访问,但区别在于支持负访问,-1代表最后一个元素
实例 :
li = [ 1, 'a', 3.45 , 10000, [1 ,5] , (1 , 5) ]
>>>li[-1]
(1,5)
(2)切片:支持强大的切片能力(优雅的捷径)在提取连续序列方面很有用,
实例:
li = [1, 2, 3, 4, 6, 5, 9]*3
print li #结果 [1, 2, 3, 4, 6, 5, 9, 1, 2, 3, 4, 6, 5, 9, 1, 2, 3, 4, 6, 5, 9]
ID=1 print li[2 : 5] #结果 [3, 4, 6]
ID=2 print li[-3 : -1] #结果 [6, 5]
ID=3 print li[ : 6] #结果 [1, 2, 3, 4, 6, 5]
ID=4 print li[7 : ] #结果 [1, 2, 3, 4, 6, 5, 9, 1, 2, 3, 4, 6, 5, 9]
ID=5 print li[ : ] #结果 [1, 2, 3, 4, 6, 5, 9, 1, 2, 3, 4, 6, 5, 9, 1, 2, 3, 4, 6, 5, 9]
ID=6 print li[3 : 1] #结果 []
切片操作的实现需要两个索引作为边界,第一个索引的元素包括在里面,第二个索引的元素不包括在里面
切片必须保持左边界小于有边界(步长为正数时)ID6
切片支持正负数作为索引 ID1,ID2;如果一面不写,代表直接到首部或者尾部ID3,ID4;全部不写,打印整个list,ID5
(2).2 关于步长
实例:
print li[ : : 3] #结果 [1, 4, 9, 3, 5, 2, 6]
步长不能是0,可以为负数,注意负数时的情况,左边界大于右边界
实例:
print li[1 : 3: -1] #结果 []
print li[3 : 1: -1] #结果 [4, 3]
(3)、序列相加,乘法,成员资格(类似字符串)
实例:
li = [1, 2, 3, 4]
li2 = [4, 5, 7]
print li + li2 #结果 [1, 2, 3, 4, 4, 5, 7]
print ---------------
print [42]*10 #结果 [42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
序列乘法可用于初始化列表,(None)
注意:字符串与list不能相加
(4)、元素赋值
类似于数组赋值
(5)、元素删除
del 元素(类似C++)
实例:
li = [ 1, 2, 5, 6, 7, 9]
del li[2]
print li #结果 [ 1, 2, 6, 7, 9]
3、切片的一些扩展应用
实例:
li = [ 1, 2, 6, 6, 7, 9]
ID =1 li[1 : 1] = [10, 22, 23]
print li #结果 [1, 10, 22, 23, 2, 6, 6, 7, 9]
ID = 2 li[2 : 5] = []
print li #结果 [1, 10, 6, 6, 7, 9]
(1)、切片赋值 ID1 可以赋值为与原序列不等长的切片
(2)、切片删除 ID2 把删除序列赋值为[]空切片
(3)、切片插入 ID1 类似于赋值
4、方法
(1)、长度len , 最小值 min,最大值 max,
min max区别于C++,可以比较任意参数
(2)、list函数,把任意一种类型转化为列表类型
实例:
s = 'The list is very useful'
print list(s) #结果 ['T', 'h', 'e', ' ', 'l', 'i', 's', 't', ' ', 'i', 's', ' ', 'v', 'e', 'r', 'y', ' ', 'u', 's', 'e', 'f', 'u', 'l']
(3)、append函数 望列表后面添加元素,
append(...)
L.append(object) -- append object to end
可以在列表后面插任意类型的元素(object),可用于列表的扩张,
(4)、extend 可以一次性在列表的后面加另一个序列(也可以用切片赋值实现)
extend(...) #iterable(可以用for循环的)
L.extend(iterable) -- extend list by appending elements from the iterable
实例:
li = [ 1, 2, 6, 6, 7, 9]
li.append(1)
li.append("you are good")
print li #结果 [1, 2, 6, 6, 7, 9, 1, 'you are good']
li.extend([ 1, 2, 4])
li.extend(( 5, 6, 9))
print li #结果 [1, 2, 6, 6, 7, 9, 1, 'you are good', 1, 2, 4, 5, 6, 9]
(5)、count 统计某个元素出现次数
(6)、index 类似于字符串的index(但list没有find方法)
(7)、insert 插入 (可以用上面所讲的切片赋值插入解决)
实例:
li = [ 1, 2, 6, 6, 7, 9]
li.insert(3,'four')
print li #结果 [1, 2, 6, 'four', 6, 7, 9]
两个参数分别为插入位置,插入元素
(8)、pop函数 (唯一一个即修改列表又返回值的函数)
实例:
li = [ 1, 2, 6, 10, 7, 9]
print li.pop(2) #结果 6
print li #结果 [1, 2, 6, 7, 9]
pop函数如果不写参数,则弹出最后元素,否则弹出对应索引的元素
pop函数的高级应用:栈和队列
栈:用pop函数和append函数维护一个栈(先进后出)
队列:用pop函数和insert函数维护一个队列(先进先出)
实例:
x = ['tom', 'jack', 'tom', 'lucy', 'bob', 'tom']
x.remove('tom')
print x #结果 ['jack', 'tom', 'lucy', 'bob', 'tom']
(10)、reserve 反转函数
请注意:本函数改变了列表但不返回值
(11) sort 排序
错误实例:
x = [ 1, 2, 6, 10, 7, 9]
y = x.sort()
print x , y #结果 [1, 2, 6, 7, 9, 10] None
正确实例:
x = [ 1, 2, 6, 10, 7, 9]
y = x[ : ] #这一部很重要 如果改成 y = x 结果就要更改(这样相当于指向同一个列表)
y.sort()
print y #结果 [1, 2, 6, 7, 9, 10]
相当于建立一个副本。
(12)、sorted函数 获取已排序的列表副本,理论上可以用于任何序列,之后返回一个list
实例:
x = [ 1, 2, 6, 10, 7, 9]
y = sorted(x)
print y #结果 [1, 2, 6, 7, 9, 10]