类似列表的数据类型
字符串和元组
一、字符串
列表不是唯一表示序列值的数据类型。字符串跟列表也很相似,只要简单的认为字符串是单个文本字符的列表。对于列表的很多操作字符串也可以用。
下标,切片,for循环,len()函数,in和not in操作符都可以用于字符串
为了看出效果,我们给出“我喜欢学习python”的字符串来验证:
jack = "我喜欢学习python" print("查询到的字符是:"+jack[1]) print("查询到的字符串是:"+jack[4:]) print("字符串的长度:"+str(len(jack))) if "python" not in jack: print("python子字符串在jack中") else: print('不在') for i in jack: print(i)
C:\Users\leiyonggang\anaconda3\python.exe C:/Users/leiyonggang/PycharmProjects/kv-demo/python基础/demo2.py 查询到的字符是:喜 查询到的字符串是:习python 字符串的长度:11 不在 我 喜 欢 学 习 p y t h o n Process finished with exit code 0
让我们来真正的区别字符串和列表:可变和不可变数据类型
——列表是可变数据类型,他的元素是可以增删改的
——字符串是不可变数据类型,尝试对字符串中的一个字符重新赋值,将会导致TypeError的错误
——注意:改变一个字符串的正确方式是切片和连接
# 我们依然对上面的字符串进行修改,的到“jack喜欢python”
str = "jack"+jack[1:3]+jack[5:]
print(str)
①看下面这些代码:
>>>eggs = [1,2,3]
>>>eggs = [4,5,6]
>>>eggs
[4,5,6]
这里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]

区分可变和不可变似乎没有意义,接下来我们一起看元组
二、元组(列表数据的不可变类型)
结构:name = (1,23,,45,6,7,5)
注意元组的值不能被增删改
三、用list()和tuple()函数来准换类型
我们将学生姓名列表list准换为元组,目前不用发生改变
stu =['唐僧','孙悟空','猪八戒','沙和尚'] tup = tuple(list) print(tup)
但是过了没多久,“观音”又加入了新班级
stu =['唐僧','孙悟空','猪八戒','沙和尚'] tup = tuple(stu) print(tup) list1 = list(tup) list1.append('观音') print(list1)
四、引用
正如你看到的,变量保存字符串和整数值。以下代码:
>>> spam = 42
>>> cheese = spam
>>> spam = 100
>>> spam
100
>>> cheese
42
你将 42 赋给 spam 变量,然后拷贝 spam 中的值,将它赋给变量 cheese。当稍
后将 spam中的值改变为 100 时,这不会影响cheese中的值。这是因为 spam和 cheese是不同的变量,保存了不同的值。
但列表不是这样的。当你将列表赋给一个变量时,实际上是将列表的“引用”
赋给了该变量。引用是一个值,指向某些数据。列表引用是指向一个列表的值。这
里有一些代码,让这个概念更容易理解。以下代码:
>>> spam = [0, 1, 2, 3, 4, 5]
>>> cheese = spam
>>> cheese[1] = 'Hello!'
>>> spam
[0, 'Hello!', 2, 3, 4, 5]
>>> cheese
[0, 'Hello!', 2, 3, 4, 5]
这可能让你感到奇怪。代码只改变了 cheese 列表,但似乎 cheese 和 spam 列表
同时发生了改变。
记住,变量就像包含着值的盒子。本章前面的图显示列表在盒子中,这并不准
确,因为列表变量实际上没有包含列表,而是包含了对列表的“引用”(这些引用
包含一些 ID 数字,Python 在内部使用这些 ID,但是你可以忽略)。利用盒子作为
变量的隐喻,

spam = [0, 1, 2, 3, 4, 5]保存了对列表的引用,而非实际列表
然后,spam 中的引用被复制给 cheese。只有新的引用被创建并保
存在 cheese 中,而非新的列表。请注意,两个引用都指向同一个列表。

spam = cheese 复制了引用,而非列表
当你改变 cheese 指向的列表时,spam 指向的列表也发生了改变,因为 cheese
和 spam 都指向同一个列表

cheese[1] = 'Hello!'修改了两个变量指向的列表
变量包含对列表值的引用,而不是列表值本身。但对于字符串和整数值,变量
就包含了字符串或整数值。在变量必须保存可变数据类型的值时,例如列表或字典,
Python 就使用引用。对于不可变的数据类型的值,例如字符串、整型或元组,Python
变量就保存值本身。
虽然 Python 变量在技术上包含了对列表或字典值的引用,但人们通常随意地
说,该变量包含了列表或字典。
六 、copy()模块和deepcopy()函数
import copy stu =['唐僧','孙悟空','猪八戒','沙和尚'] tup = tuple(stu) print(tup) list1 = list(tup) list1.append('观音') list2 = copy.copy(list1) list2[2]='如来' print(list1) print(list2)
如果要复制的列表中包含了列表,那就使用 copy.deepcopy()函数来代替。
deepcopy()函数将同时复制它们内部的列表。
上一节 下一节 返回目录

浙公网安备 33010602011771号