python基础(四):元组(Tuple)、字符串、序列

一、元组

元组和列表的区别:
元组是一个受限的列表,它不能对已创建的元组中的内容进行修改,创建了就固定了。

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、切片

所谓切片就是在内存空间中产生多个数据,而索引在内容一样的时候,大家都指向的是同一个内存地址,切片可以将相同的数据在内存中复制几份,内存地址不一样!无论存储数据是否一样,每个切片都对应一个不一样的内存地址。

发布了202 篇原创文章 · 获赞 152 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/105714343
今日推荐