-
列表元素按照顺序有序排列
-
根据需要动态分配和回收内存
可对列表执行所有的标准序列操作,如索引、切片、拼接和相乘,但列表的有趣之处在于它不同于元组 是可以修改的。
修改列表很容易,只需使用索引表示法给特定位置的元素赋值即可。
从列表中删除元素也很容易,只需使用del语句即可。
使用切片赋值,可将切片替换为长度与其不同的序列
使用切片赋值还可在不替换原有元素的情况下插入新元素。
部分方法在《顺序表与单链表》那篇文章有涉及,这里复述下
方法append用于将一个对象附加到列表末尾。
-
clear 方法clear就地清空列表的内容。
-
copy 方法 copy 复制列表,常规复制只是将另一个名称关联到列表。
要让a和b指向不同的列表,就必须将b关联到a的副本
方法count计算指定的元素在列表中出现了多少次
5. extend
方法extend让你能够同时将多个值附加到列表末尾,为此可将这些值组成的序列作为参数提
供给方法extend。换而言之,你可使用一个列表来扩展另一个列表。
这可能看起来类似于拼接,但存在一个重要差别,那就是将修改被扩展的序列(这里是a)。在常规拼接中,情况是返回一个全新的序列。
拼接出来的列表与前一个示例扩展得到的列表完全相同,但在这里a并没有被修 改。如果要获得类似于下面的效果, 拼接的效率将比extend低
拼接操作不会修改原来的列表。要获得与extend相同的效果, 可将列表赋给切片,
方法index在列表中查找指定值第一次出现的索引。
方法insert用于将一个对象插入列表。
与extend一样,也可使用切片赋值来获得与insert一样的效果。
方法pop从列表中删除一个元素(末尾为最后一个元素),并返回这一元素。
方法remove用于删除第一个为指定值的元素。remove是就地修改且不返回值的方法之一。不同于pop的是,它修改列表,但不返 回任何值。
方法reverse按相反的顺序排列列表中的元素
方法sort用于对列表就地排序。就地排序意味着对原来的列表进行修改,使其元素按顺序 排列,而不是返回排序后的列表的副本。
只改变副本,保留原始列表不变,使用以下方法:
实际上,这个sorted()函数可用于任何序列,但总是返回一个列表
方法sort接受两个可选参数:key和reverse。参数key类似于参数cmp:你将其设置为一个用于排序的函数。然而, 不会直接使用这个函数来判断一个元素是否比另一个元素小,而是使用它来为每个元素创建一个 键,再根据这些键对元素进行排序。因此,要根据长度对元素进行排序,可将参数key设置为函数len。
对于另一个关键字参数reverse,只需将其指定为一个真值,以指出是否要按相反的顺序对列表进行排序。
函数sorted也接受参数key和reverse。在很多情况下,将参数key设置为一个自定义函数很有 用。
简称“生成列表的公式”,通常含有自定义的变量
还可添加更多的for部分。
与列表一样,元组也是序列,唯一的差别在于元组是不能修改的这一点和字符串 一样的。元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。
# 只包含一个值的元组
42,
函数tuple的工作原理与list很像:它将一个序列作为参数,并将其转换为元组。如果参数 已经是元组,就原封不动地返回它。
元组的创建及其元素的访问方式与其他序列相同
元组是可以迭代的对象,所以可以用for...in进行遍历
在python中字符串是基本的数据的类型,是一个不可变的字符序列
格式化字符串的两种方法:
宽度、精度和千位分隔符
设置浮点数(或其他更具体的小数类型)的格式时,默认在小数点后面显示6位小数,并根 据需要设置字段的宽度,而不进行任何形式的填充。
在一栏中同时包含字符串和数时,可以修改默认对齐方式。方法是在指定宽 度和精度的数前面,添加一个标志,这个标志可以是零、加号、减号或空格
要指定左对齐、右对齐和居中,可分别使用<、 >和^
可以使用填充字符来扩充对齐说明符,这样将使用指定的字符而不是默认的空格来填充
还有更具体的说明符=,它指定将填充字符放在符号和数字之间
如果要给正数加上符号,可使用说明符+,默认是-
将字符串转化为指定类型的数据格式
方法center通过在两边添加填充字符(默认为空格)让字符串居中
方法find在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1
还可指定搜索的起点和终点
0
join是一个非常重要的字符串方法,其作用与split相反,用于合并序列的元素
注意,如果没有指定分隔符,将默认在单个或多个连续的空白字符(空格、制表符、换行符 等)处进行拆分。
方法lower返回字符串的小写版本。
方法replace将指定子串都替换为另一个字符串,并返回替换后的结果
方法strip将字符串开头和末尾的空白(但不包括中间的空白)删除,并返回删除后的结果
还可在一个字符串参数中指定要删除哪些字符
这个方法只删除开头或末尾的指定字符,因此中间的星号未被删除。
方法translate与replace一样替换字符串的特定部分,但不同的是它只能进行单字符替换。这个方法的优势在于能够同时替换多个字符,因此效率比replace高。
使用translate前必须创建一个转换表。这个转换表指出了不同Unicode码点之间的转 换关系。要创建转换表,可对字符串类型str调用方法maketrans,这个方法接受两个参数:两个 长度相同的字符串,它们指定要将第一个字符串中的每个字符都替换为第二个字符串中的相应字 符。
可查看转换表的内容,看到的只是Unicode码点之间的映射
调用方法maketrans时,还可提供可选的第三个参数,指定要将哪些字母删除。
7.判断字符串是否满足特定的条件
-
与列表一样是一个可变序列
-
以键值对的方式存储数据,字典是一个无序的序列
2.函数 dict 可使用函数dict从其他映射(如其他字典)或键值对序列创建字典
还可使用关键字实参来调用这个函数
字典的基本行为在很多方面都类似于序列。
-
len(d)返回字典d包含的项(键值对)数。
-
d[k]返回与键k相关联的值。
-
k in d检查字典d是否包含键为k的项。
将字符串格式设置功能用于字典
可在字典中包含各种信息,这样只需在格式字符串中提取所需的信息即可。为此, 必须使用format_map来指出你将通过一个映射来提供所需的信息。
-
clear 方法clear删除所有的字典项,这种操作是就地执行的
这为何很有用呢?我们来看两个场景。下面是第一个场景:
在这两个场景中, x和y最初都指向同一个字典。在第一个场景中,通过将一个空字典赋 给x来“清空”它。这对y没有任何影响,它依然指向原来的字典。但要删除原来字典的所有元素,必须使用clear,这样做的话y也将是空的
方法copy返回一个新字典,其包含的键值对与原来的字典相同(这个方法执行的是浅复制, 因为值本身是原件,而非副本)。
可以看出,当替换副本中的值时,原件不受影响。然而,如果修改副本中的值(就地修改而 不是替换),原件也将发生变化,因为原件指向的也是被修改的值
为避免这种问题,一种办法是执行深复制,即同时复制值及其包含的所有值。为此, 可使用模块copy中的函数deepcopy。
方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None。
这个示例首先创建了一个空字典,再对其调用方法fromkeys来创建另一个字典,这显得有点 多余。可以不这样做,而是直接对dict调用方法fromkeys。
如果不想使用默认值None,可提供特定的值
方法get为访问字典项提供了更加灵活的方法。通常,如果你试图访问字典中没有的项,将引发 错误。
而使用get不会这样:
使用get来访问不存在的键时,没有引发异常,而是返回None。还可指定“默认” 值,这样将返回指定的值而不是None。
方法items返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。字典项 在列表中的排列顺序不确定。
返回值属于一种名为字典视图的特殊类型。字典视图可用于迭代,还可确定其长度以及对其执行成员资格检查。
方法keys返回一个字典视图,其中包含指定字典中的键。
方法pop可用于获取与指定键相关联的值,并将该键值对从字典中删除。
方法popitem类似于list.pop,但list.pop弹出列表中的最后一个元素,而popitem随机地弹 出一个字典项,因为字典项的顺序是不确定的,没有“最后一个元素”的概念。
方法setdefault有点像get,因为它也获取与指定键相关联的值,但除此之外, setdefault 还在字典不包含指定的键时,在字典中添加指定的键值对。
如上,指定的键不存在时, setdefault返回指定的值并相应地更新字典。如果指定的键 存在,就返回其值,并保持字典不变。与get一样,值是可选的;如果没有指定,默认为None。
方法update使用一个字典中的项来更新另一个字典
对于通过参数提供的字典,将其项添加到当前字典中。如果当前字典包含键相同的项,就替 换它。可像函数dict那样调用方法update。这意味着调用 update时,可向它提供一个映射、一个由键值对组成的序列或关键字参数
方法values返回一个由字典中的值组成的字典视图。不同于方法keys,方法values返回的视 图可能包含重复的值
在列表生成式中, for前面只有一个表达式,而在字典生成式中, for前面有两个用冒号分隔的表 达式,这两个表达式分别为键及其对应的值
集合是python语言提供的内置数据结构,与列表,字典一样属于可变类型的数列,集合实际上是没有value的字典
-
使用内置函数set()
用来判断元素是否在集合中
一次删除一个指定的元素
一次删除一个指定的元素,如果指定的元素不存在,不抛出异常
一次只删除一个任意元素
一个集合是否是另一个集合的子集
一个集合是否是另一个集合的超集