字符串是单个文本字符的列表。对列表的许多操作,也可以作用于字符串:
按下标取值、切片、用于 for
循环、用于 len()
,
以及用于 in
和 not in
操作符。
name = 'Zophie'
name[0]
'Z'
name[-2]
'i'
name[0:4]
'Zoph'
'Zo' in name
True
'p' not in name
False
for i in name:
print('* * * ' + i + ' * * * ')
* * * Z * * * * * * o * * * * * * p * * * * * * h * * * * * * i * * * * * * e * * *
# name = 'Zophie a cat'
# name[7] = 'the' #此代码会报错
“改变”一个字符串的正确方式,是使用切片和连接。构造一个“新的”字符串, 从老的字符串那里复制一些部分。例如:
name = 'Zophie a cat'
newName = name[0:7] + 'the' + name[8:12]
name
'Zophie a cat'
newName
'Zophie the cat'
用 [0:7]
和 [8:12]
来指那些不想替换的字符。请注意,
原来的 'Zophie a cat'
字符串没有被修改,
因为字符串是不可变的。尽管列表值是可变的,
但下面代码中的第二行并没有修改列表 eggs
:
eggs =[1,2, 3]
eggs = [4, 5, 6]
eggs
[4, 5, 6]
这里 eggs
中的列表值并没有改变,而是整个新的不同的列表值([4, 5, 6])
,
覆写了老的列表值。如下图所示:当 eggs=[4,5,6]
被执行时,
eggs
的内容被新的列表值取代。
如果确实希望修改 eggs
中原来的列表,
让它包含 [4, 5, 6]
,就要这样做:
eggs = [1, 2, 3]
del eggs[2]
del eggs[1]
del eggs[0]
eggs.append(4)
eggs.append(5)
eggs.append(6)
eggs
[4, 5, 6]
在第一个例子中, eggs
最后的列表值与它开始的列表值是一样的。
只是这个列表被改变了,而不是被覆写。下图展示了前面交互式脚本的例子中,
前7行代码所做的7次改动。del
语句和 append()
方法当场修改了同一个列表值。
改变一个可变数据类型的值,当场改变了该值,因为该变量的值没有被一个新的列表值取代。
eggs = ('hello', 42, 0.5)
eggs[0]
'hello'
eggs[1:3]
(42, 0.5)
len(eggs)
3
第二,元组是不可变的。元组不能让它们的值被修改、添加或删除,否则将会出现如下错误。例如:
# eggs = ('hello', 42, 0.5)
# eggs[1] = 99 #此代码会报错
另外,Python可以实现一些优化,让使用元组的代码比使用列表的代码更快。
tuple( ['cat' , 'dog', 5])
('cat', 'dog', 5)
list (('cat', 'dog', 5))
['cat', 'dog', 5]
list('hello')
['h', 'e', 'l', 'l', 'o']
元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。
1, 2, 3
(1, 2, 3)
如上所见,元组通常用圆括号括起。
(1, 2, 3)
(1, 2, 3)
创建空元组
tup1 = ()
tup1 = (50)
不加逗号,类型为整型
type(tup1)
int
tup1 = (50,)
加上逗号,类型为元组
type(tup1)
tuple
注意:加上一个逗号,就能完全改变表达式的值。
3 * (40 + 2)
126
添加逗号后,如下所示:
3 * (40 + 2,)
(42, 42, 42)
为何要熟悉元组呢?原因有以下两个。
- 它们用作映射中的键(以及集合的成员),而列表不行。
- 有些内置函数和方法返回元组,这意味着必须跟它们打交道。只要不尝试修改元组,与元组“打交道”通常意味着像处理列表一样处理它们(需要使用元组没有的index和count 等方法时例外)。
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[0]: ", tup1[0])
tup1[0]: Google
print ("tup2[1:5]: ", tup2[1:5])
tup2[1:5]: (2, 3, 4, 5)
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz')
以下修改元组元素操作是非法的。
# tup1[0] = 100
创建一个新的元组
tup3 = tup1 + tup2;
print (tup3)
(12, 34.56, 'abc', 'xyz')
tup = ('Google', 'Runoob', 1997, 2000)
print (tup)
del tup
print ("删除后的元组 tup : ")
# print (tup) #此代码会报错
('Google', 'Runoob', 1997, 2000) 删除后的元组 tup :
tuple1 = ('Google', 'Runoob', 'Taobao')
len(tuple1)
3
max(tuple)
返回元组中元素最大值。
tuple2 = ('5', '4', '8')
max(tuple2)
'8'
min(tuple)
返回元组中元素最小值。
tuple2 = ('5', '4', '8')
min(tuple2)
'4'
tuple(seq)
将列表转换为元组。
list1= ['Google', 'Taobao', 'Runoob', 'Baidu']
tuple1=tuple(list1)
tuple1
('Google', 'Taobao', 'Runoob', 'Baidu')