序列(sequence )是Python中最基本的数据结构,笔者尚且理解为java 数组。其中列表和元组是最常用的序列类型。列表中元素可修改,而元组不能。
一、序列通用操作
Python提供了针对所有序列通用的内建函数(内建函数就是Python本身含有的,无需引入其他模块方可使用),分别有:索引indexing、分片sliceing、加adding、乘multiplying、检查某个元素是否属于序列、计算序列长度、找出最大、最小元素的内建函数。
1、索引
0为序列第一个元素,-1为最后一位。
2、分片
用于截取序列中的某一部分值。根据给出的索引边界,第一个索引元素包含在分片内,第二个则不在返回结果中。
分片操作就是按照步长逐个遍历序列元素,默认步长为1,如果设置步长大于1,则遍历时会跳过某些元素进行。步长可是不为0 的任意正负数。为负时,表示从右至左提取元素。
3、序列相加
4、乘法
5、判断元素是否存在于序列中
6、长度 、最大值、最小值
#-*- coding: utf-8 -*-
#indexing 输入2006,返回第四位,-1表示最后一位
forth=raw_input('Year: ')[3]
print forth #6
forth=raw_input('Year: ')[-1]
print forth #6
#sliceing
numbers=[0,1,2,3,4,5,6,7,8,9,10,11,12]
#以步长为1(默认),依次截取1到第10位元素
print numbers[1:10] #[1, 2, 3, 4, 5, 6, 7, 8, 9]
#以步长为3,依次截取1到第10位元素
print numbers[1:10:3] #[1, 4, 7]
#以步长为3,依次截取0到最后一位元素
print numbers[::3] #[0, 3, 6, 9, 12]
#以步长为3,反着截取0到最后一位元素
print numbers[::-3] #[12, 9, 6, 3, 0]
sequence0=['max','linxi','lu']
#adding 字符串+
print numbers+sequence0 #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'max', 'linxi', 'lu']
#mul
print numbers*2 #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
sequence1=['3','2']
container=[sequence0,sequence1]
print container #[['max', 'linxi', 'lu'], ['3', '2']]
#len\max\min
print len(numbers)
print max(numbers)
print min(numbers)
#isExist
if 3 in numbers :print 'yes' #yes
print 2 in numbers #True
database=[['max','1'],['linxi','1'],['niaon',1],['li',1]]
username= raw_input()
pin=raw_input()
if [username,pin] in database : print 'Access granted'
二、列表 列表是序列的一个种类,以上操作均适用于列表,同时因为列表是可变的,所以对于列表常用的操作还有元素赋值、删除、分表赋值、列表方法
1、list函数
list=list('mxz')
print list
name= list('max') #报错!
报错'list' object is not callable
原因list是一个内建函数,如果使用list作为变量名,就无法调用list函数。
2、分片赋值
从某位开始替换成**字符
#list函数+分片赋值 将index2开始替换
name= list('maxxx')
name[2:]=list('Zhong')
print name #['m', 'a', 'Z', 'h', 'o', 'n', 'g']
#分片赋值 从第一位开始,插入1个
name[1:1]=['linxi']
print name #['m', 'linxi', 'a', 'Z', 'h', 'o', 'n', 'g']
name[1:1]=list('linxi')
print name #['m', 'l', 'i', 'n', 'x', 'i', 'linxi', 'a', 'Z', 'h', 'o', 'n', 'g']
3、列表方法append()
如同stringbuffer的append,
count()
判断某元素在列表中出现的次数
extend()
直接在list后追加,但a.extend(b)返回的是一个新的a列表,而a+b,返回a+b的一个副本,a列表本身并未发生改变。
index()
找出某元素的索引值
insert()
del()
pop()
注意不同于print a.insert()方法直接返回None,print a.pop(0)
不会报错,直接返回a.insert(2,‘max’)就直接返回None,因为pop是唯一一个 既能修改列表、又能直接返回元素值的方法,python使用append 方法代替入栈
push, 出栈使用pop。
remove('value')
x.reverse() 123变成321
sort 将列表中的元素按照一定顺序排序,返回一个新的对象
#-*- coding: utf-8 -*-
#list函数+分片赋值 将index2开始替换
name= list('maxxx')
name[2:]=list('Zhong')
print name #['m', 'a', 'Z', 'h', 'o', 'n', 'g']
#分片赋值 从第一位开始,插入1个
name[1:1]=['linxi']
print name #['m', 'linxi', 'a', 'Z', 'h', 'o', 'n', 'g']
name[1:1]=list('linxi')
print name #['m', 'l', 'i', 'n', 'x', 'i', 'linxi', 'a', 'Z', 'h', 'o', 'n', 'g']
#append extend 追加 和扩展
#append 是添加ylist,而extend是直接把b的元素追加到a后,还是一个单个元素的list
x=[1,2,3]
y=[2,2]
x.append(y)
print x #[1, 2, 3, [2, 2]]
#count
x=[1,1,1,1,1,2]
print x.count(1) #5
#extend
a=[1,2,3]
b=[4,5,6]
a.extend(b)
print a #[1, 2, 3, 4, 5, 6] extend修改了被扩展的序列,
print b #[4, 5, 6]
a=[1,2,3]
b=[4,5,6]
a+b #[1, 2, 3, 4, 5, 6] #原始的连接并未被修改,只是返回了a和b连接副本的全新列表。连接操作效率比extend低
print a #[1, 2, 3]
print b #[4, 5, 6]
#index
print a.index(2) #1 返回a中2的index值
#insert,在索引2处添加mam 字符
a.insert(2,"mam")
print a #[1, 2, 'mam', 3]
#出栈 剔除索引为0的元素
print a.pop(0) #[1, 2, 'mam', 3]
print a #[2, 'mam', 3]
a.pop()#默认剔除最后一位
print a #[2, 'mam']
#sort
x=[4,2,3]
x.sort() [2,3,4]
三、元组 不可修改(1,2,3) 直接创建了一个元组
(1,)当只有一个元素时,必须加,
tuple :list转成元组
x=[1,23,2]
x.insert(2,'max')
tuple(x) #list转成元组
print x
四、总结
针对元素值 |
lst.append(‘value’) |
|
lst.count(‘value’) |
| |
lst.extend(‘value’) |
| |
lst.index(‘value’) |
| |
lst.insert(index,value) |
| |
lst..remove(value) |
| |
针对索引 |
x[1]=2 |
把索引1处值赋为2 |
del names[2] |
删除names列表索引2处值 | |
name[2:]=list(‘max’) |
从name索引2处替换成max | |
x.pop(index) |
| |
无参数 |
x.sort() |
|
x.reverse() |
|