一、元组
元组和列表的区别:
元组是一个受限的列表,它不能对已创建的元组中的内容进行修改,创建了就固定了。
1、创建元组
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
创建空元组:
tup1 = ()
元组中只包含一个元素时,需要在元素后面添加逗号来消除歧义不加逗号,就是int类型
tup1 = (50,)
元组与字符串类似,下标索引从0开始,可以进行截取,组合,切片等。
2、访问元组
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]
#以上实例输出结果:
#tup1[0]: physics
#tup2[1:5]: [2, 3, 4, 5]
3、修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
# 创建一个新的元组
tup3 = tup1 + tup2
print tup3
#以上实例输出结果:
#(12, 34.56, 'abc', 'xyz')
4、删除元组
tup = ('physics', 'chemistry', 1997, 2000)
del tup
5、元组内置函数
cmp(tuple1, tuple2):比较两个元组元素。
len(tuple):计算元组元素个数。
max(tuple):返回元组中元素最大值。
min(tuple):返回元组中元素最小值。
tuple(seq):将列表转换为元组。
6、元组特点
tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
代码如下:
classmates = ('Michael', 'Bob', 'Tracy')
现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素。
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来
二、字符串
python 字符串操作常用操作,如字符串的替换、删除、截取、赋值、连接、比较、查找、分割等
1、去除空格
str.strip():删除字符串两边的指定字符,括号的写入指定字符,默认为空格
a=' hello '
b=a.strip()
print(b) #输出:hello
str.lstrip():删除字符串左边的指定字符,括号的写入指定字符,默认空格
str.rstrip():删除字符串右边的指定字符,括号的写入指定字符,默认空格
2、连接字符串
str = 'adb'
print('******'.join(str))
str = ['abc','def']
print('******'.join(str))
执行结果:
此处的连接符就是’******’。
3、查找字符串
a='hello world'
>>> a.index('l')
2
>>> a.index('x') #会报错!
#str.find:检测字符串中是否包含子字符串str,可指定范围
>>> a='hello world'
>>> a.find('l')
2
>>> a.find('x') #不会报错,找不到回返回-1
-1
4、比较字符串
str.cmp:比较两个对象,并根据结果返回一个整数。X< Y,返回值是负数 ,X>Y 返回的值为正数。
>>> a=100
>>> b=80
>>> cmp(a,b)
1
5、是否包含指定字符串
# in |not in
>>> a='hello world'
>>> 'hello' in a
True
>>> '123' not in a
True
6、字符串的长度
str.len
>>>a='hello world'
>>>print(len(a))
11
7、字符串中大小写转换
S.lower() #转换为小写
>>> a='Hello World'
>>> print(a.lower())
hello world
S.upper() #转换为大写
>>> a='Hello World'
>>> print(a.upper())
HELLO WORLD
S.swapcase() #大小写互换
>>> a='Hello World'
>>> print(a.swapcase())
hELLO wORLD
S.capitalize() #首字母大写
>>> a='Hello World'
>>> print(a.capitalize())
Hello world
8、将字符串放入中心位置可指定长度以及位置两边字符
str.center()
>>> a='hello world'
>>> print(a.center(40,'*'))
**************hello world***************
9、字符串统计
>>> a='hello world'
>>> print(a.count('l'))
10、字符串的测试、判断函数,这一类函数在string模块中没有,这些函数返回的都是bool值
S.startswith(prefix[,start[,end]]) #是否以prefix开头
S.endswith(suffix[,start[,end]]) #以suffix结尾
S.isalnum() #是否全是字母和数字,并至少有一个字符
S.isalpha() #是否全是字母,并至少有一个字符
S.isdigit() #是否全是数字,并至少有一个字符
S.isspace() #是否全是空白字符,并至少有一个字符
S.islower() #S中的字母是否全是小写
S.isupper() #S中的字母是否便是大写
S.istitle() #S是否是首字母大写的
11、字符串切片
str = '0123456789′
print str[0:3] #截取第一位到第三位的字符
print str[:] #截取字符串的全部字符
print str[6:] #截取第七个字符到结尾
print str[:-5:-3] #逆序截取,截取倒数第五位数与倒数第三位数之间
12、分割前中后三部分
s="alex SB alex"
ret = s.partition('SB')
print(ret)
#输出元组 ('alex ', 'SB', ' alex')
13、字符串替换
s="alex SB alex"
s.replace("al","BB")
print(ret)
#输出结果 BBex SB BBex
14、按输入字符切割字符串
s="alexalec"
ret=s.split("e")
print(ret)
#输出结果 ['al', 'xal', 'c']
15、根据换行执行分割
s="alex\nalec"
ret=s.splitlines()
print(ret)
#输出结果 ['alex', 'alec']
16、大写变小写,小写变大写
s="alExAlec"
ret=s.swapcase()
print(ret)
#输出结果 ALeXaLEC
17、将字符串标题化
s="alExAlec"
ret=s.title()
print(ret)
#输出Alexalec
18、返回指定长度的字符串,原字符串右对齐,前面填充0
s="alEx Alec"
ret=s.zfill(11)
print(ret)
#输出结果 00alEx Alec
三、序列
序列是是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。每个索引对应一个元素。
Python包含 6 中内建的序列,包括列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。
对于序列,都可以使用以下操作:
1.索引
2.切片
3.加
4.乘
5.成员运算符
6.计算序列的长度
7.取序列中的最大、最小值
其中主要说下索引
和切片
的区别!
1、索引
所谓的索引就是对每个元素进行编号,注意,编号是从0开始的。
我们可用通过索引来取得其对应的元素:
l = []
a = ('scolia', 123, True, (), l)
b = a[4]
b.append(1) #append()是列表的一个方法,将一个元素添加到列表的最后,对原列表进行操作,但返回值为None
print(l)
print(b)
print(id(a[4]))
print(id(l))
print(id(b))
b追加了一个元素1,为什么l也改变了呢?b存的是a[4],a[4]存的是l,根据运行结果,我们可以这样说,对b操作相当于对l这个列表操作,说明无论是a[4],l,还是b它们都指向一个内存地址,那就是[]的内存地址。
如下运行结果可以证明
结论:序列其实是一个容器,里面可以放任何的对象,而当我们通过索引去取的时候,取到的原对象。那么我看是不是可以将索引看作是一个特别的变量,它指向的也是内存空间,当然这个说法套到字符串中略显变扭,我们只能假设字符串是将每个字符都存在一个内存空间中,每个字符都是字符串类型,变量取得的是整个字符串,而索引则是每个字符的变量。我们看看这个假设的结果如何
a = 'abcdabcd'
print("",id(a[0]),"\n",id(a[4])) #逗号不仅可以分隔,还有空格的作用
#注去掉前面的逗号换行后无法对齐!因为后面那个地址前面有个相当于空格的逗号,而前面那个地址没有。
验证上述猜想正确!
2、切片
所谓切片就是在内存空间中产生多个数据,而索引在内容一样的时候,大家都指向的是同一个内存地址,切片可以将相同的数据在内存中复制几份,内存地址不一样!无论存储数据是否一样,每个切片都对应一个不一样的内存地址。