python【列表--4字符串、元组】

本文介绍了Python中字符串的切片操作,展示了可变和不可变数据类型的对比,包括列表、元组及其转换,以及引用的概念和id()函数的应用。通过实例讲解了列表的修改行为与元组的不可变性。此外,还涵盖了参数传递、copy模块的使用,以及列表复制的不同方法。
摘要由CSDN通过智能技术生成

1、字符串的切片
列表并不是唯一表示序列值的数据类型。例如,字符串和列表实际上很相似,只要你认为字符串是单个文本字符的列表。对列表的许多操作,也可以作用于字符串:按下标取值、切片、用于for 循环、用于len(),以及用于in 和not in 操作符。

>>> name = 'Zophie'
>>> name[0]
'Z'
>>> name[-2]
'i'
>>> name[0:4]
'Zoph'
>>> 'Zo' in name
True
>>> 'z' in name
False
>>> 'p' not in name
False
>>> for i in name:
print('* * * ' + i + ' * * *')
* * * Z * * *
* * * o * * *
* * * p * * *
* * * h * * *
* * * i * * *
* * * e * * *

2、可变和不可变数据类型
列表是“可变的”数据类型,它的值可以添加、删除或改变。但是,字符串是“不可变的”,它不能被更改。
“改变”一个字符串的正确方式,是使用切片和连接。构造一个“新的”字符串,从老的字符串那里复制一些部分。

>>> name = 'Zophie a cat'
>>> newName = name[0:7] + 'the' + name[8:12]
>>> name
'Zophie a cat'
>>> newName
'Zophie the cat'

3、元组数据类型
元组输入时用圆括号(),而不是用方括号[]。

>>> 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
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
eggs[1] = 99
TypeError: 'tuple' object does not support item assignment

如果元组中只有一个值,你可以在括号内该值的后面跟上一个逗号,表明这种情况。否则,Python 将认为,你只是在一个普通括号内输入了一个值。

>>> type(('hello',))
<class 'tuple'>
>>> type(('hello'))
<class 'str'>

4、用list()和tuple()函数来转换类型
函数list()和tuple()将返回传递给它们的值的列表和元组版本。

>>> tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
>>> list(('cat', 'dog', 5))
['cat', 'dog', 5]
>>> list('hello')
['h', 'e', 'l', 'l', 'o']

5、引用
a、变量保存字符串和整数值

>>> spam = 42
>>> cheese = spam
>>> spam = 100
>>> spam
100
>>> cheese
42

你将 42 赋给spam 变量,然后拷贝spam 中的值,将它赋给变量cheese。当稍后将spam中的值改变为100 时,这不会影响cheese 中的值。这是因为spam和cheese是不同的变量,保存了不同的值。

b、当你将列表赋给一个变量时,实际上是将列表的“引用”赋给了该变量。引用是一个值,指向某些数据。列表引用是指向一个列表的值。

1>>> spam = [0, 1, 2, 3, 4, 5]
2>>> cheese = spam
3>>> cheese[1] = 'Hello!'
>>> spam
[0, 'Hello!', 2, 3, 4, 5]
>>> cheese
[0, 'Hello!', 2, 3, 4, 5]

当创建列表时1,你将对它的引用赋给了变量。但下一行2只是将spam 中的列表引用拷贝到cheese,而不是列表值本身。这意味着存储在spam 和cheese 中的值,现在指向了同一个列表。底下只有一个列表,因为列表本身实际从未复制。所以当你修改cheese 变量的第一个元素时3,也修改了spam 指向的同一个列表。

6、标识和id()函数
python中的所有值都有一个唯一的标识,可以通过id()函数获得。
当python运行id()函数时,将在计算机内存中创建‘hollday’字符串,返回字符串的数字内存地址。

>>> day1='hollday'
>>> id(day1)
1346830359664

字符串是不可变的,如果‘更改’变量中的字符串,就会在内存中其他位置创建新的字符串对象,并且该变量引用这个新字符串。

>>> day1='hollday'
>>> id(day1)
1346830359664
>>> day1 += ' haha'
>>> id(day1)
1346830390000

列表可以修改,他们时可变对象,append()方法不会创建新的列表对象,它更改现有的列表对象,‘就地修改对象’:

>>> eggs = ['cats', 'dogs']
>>> id(eggs)
1346830451848
>>> eggs.append('moose')
>>> id(eggs)
1346830451848
>>> eggs = ['cats', 'dogs', 'moose']
>>> id(eggs)
1346830451720

append()、extend()、remove()、sort()、reverse()就地修改其列表

7、传递引用
要理解参数如何传递给函数,引用就特别重要。当函数被调用时,参数的值被复制给变元。对于列表(以及字典,我将在下一章中讨论),这意味着变元得到的是引用的拷贝。

8、copy 模块的copy()和deepcopy()函数
在处理列表和字典时,尽管传递引用常常是最方便的方法,但如果函数修改了传入的列表或字典,你可能不希望这些变动影响原来的列表或字典。要做到这一点,Python 提供了名为copy 的模块,其中包含copy()和deepcopy()函数。第一个函copy.copy(),可以用来复制列表或字典这样的可变值,而不只是复制引用。

>>> import copy
>>> spam = ['A', 'B', 'C', 'D']
>>> cheese = copy.copy(spam)
>>> cheese[1] = 42
>>> spam
['A', 'B', 'C', 'D']
>>> cheese
['A', 42, 'C', 'D']

如果要复制的列表中包含了列表,那就使用copy.deepcopy()函数来代替。deepcopy()函数将同时复制它们内部的列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值