《Python语言及其应用》读书笔记(2)之第3章Python容器:列表、元组、字典与集合(关键词:列表/元组/字典/集合)

来源:互联网 发布:唐氏筛查看男女软件 编辑:程序博客网 时间:2024/05/22 09:07

第3章 Python容器:列表、元组、字典与集合

3.1 列表和元组

3.2 列表

3.2.1 使用[]或者list()创建列表

4.6节会再介绍一种创建列表的方式,称为列表推导

3.2.2 使用list()将其他数据类型转换成列表

将一个字符串转换成由单个字母组成的列表:

>>> list('cat')['c', 'a', 't']

将一个元组转换成列表:

>>> a_tuple = ('i','am','fine')>>> list(a_tuple)['i', 'am', 'fine']

如2.3.9节所述,使用split()可以依据分隔符将字符串切割成由若干子串组成的列表:

>>> birth = "1991/03/27">>> birth.split('/')['1991', '03', '27']

3.2.3 使用[offset]获取元素

3.2.4 包含列表的列表

3.2.5 使用[offset]修改元素

3.2.6 指定范围并使用切片提取元素

3.2.7 使用append()添加元素至尾部

3.2.8 使用extend()或+=合并列表

>>> list1 = ['a','b']>>> list2 = ['3','4']>>> list1.extend(str2)>>> list1['a', 'b', '3', '4']
>>> list1 = ['a','b']>>> list2 = ['3','4']>>> list1 += list2>>> list1['a', 'b', '3', '4']

3.2.9 使用insert()在指定位置插入元素

append()函数只能将新元素插入到列表尾部,使用insert()可以将元素插入到列表的任意位置。

>>> list1 = ['a','b','2','5']>>> list1.insert(3,'hello')>>> list1['a', 'b', '2', 'hello', '5']

3.2.10 使用del删除指定位置的元素

>>> list2 = ['i', 'am', 'fine', 'thanks']>>> del list2[2]>>> list2['i', 'am', 'thanks']

3.2.11 使用remove()删除具有指定值的元素

>>> list2 = ['i', 'am', 'fine', 'thanks']>>> list2.remove('am')>>> list2['i', 'fine', 'thanks']

3.2.12 使用pop()获取并删除指定位置的元素

使用pop()可以获取列表中指定位置的元素,但在获取完成后,该元素会被自动删除。
我的理解:pop()可以删除列表中指定位置的元素,并且返回(return)这个元素。
如果不指定pop(args)中的args,则默认删除最后一个尾部元素:

>>> list2 = ['i', 'am', 'fine', 'thanks']>>> list2.pop()'thanks'>>> list2['i', 'am', 'fine']

如果使用append()来添加元素到尾部,并通过pop()从尾部删除元素,实际上,实现了一个称为LIFO(后进先出)的数据结构。习惯称之为stack)。
队列 如果使用append()来添加元素到尾部,并通过pop(0)从头部部删除元素,实际上,实现了一个称为LIFO(先进先出)的数据结构。习惯称之为队列queue)。

3.2.13 使用index()查询具有特定值的元素位置

如果想知道某一个元素位于列表的什么位置,可以使用index()函数进行查询:

>>> list2 = ['i', 'am', 'fine', 'thanks']>>> list2.index('am')1

3.2.14 使用in判断值是否存在

>>> list2 = ['i', 'am', 'fine', 'thanks']>>> 'am' in list2True

3.2.15 使用count()记录特定值出现的次数

>>> list3 = ['i', 'am', 'fine', 'i', 'am', 'henry']>>> list3.count('i')2

3.2.16 使用join()转换为字符串

join()函数的参数是字符串或者其他可迭代的包含字符串的序列(例如一个字符串列表),输出是一个字符串。

>>> list3 = ['i', 'am', 'fine', 'i', 'am', 'henry']>>> ' + '.join(list3)'i + am + fine + i + am + henry'

3.2.17 使用sort()重新排列元素

  • 列表方法sort()会对原列表进行排序,改变原列表内容;
  • 通用函数sorted()会返回排好序的列表副本,原列表内容不变。
>>> c = [3,1,4,5,9,2,6]>>> c.sort()>>> c[1, 2, 3, 4, 5, 6, 9]>>> a = [3,1,4,5,9,2,6]>>> b = sorted(a)>>> b[1, 2, 3, 4, 5, 6, 9]>>> a[3, 1, 4, 5, 9, 2, 6]

默认的排序是升序的,添加参数reverse=True可以改变为降序排列:

>>> c = [3,1,4,5,9,2,6]>>> c.sort(reverse=True)>>> c[9, 6, 5, 4, 3, 2, 1]

3.2.18 使用len()获取长度

len()可以返回列表长度

3.2.19 使用=赋值,使用copy()复制

这里写图片描述
这里写图片描述
上图意思说的就是浅复制。
深复制有这样几种方法:

  • 列表copy()函数
  • list()转换函数
  • 列表分片[:]
    示例:
>>> a = [1,2,3]>>> b = a.copy()>>> c = list(a)>>> d = a[:]>>> a[0] = 6>>> b[1, 2, 3]>>> c[1, 2, 3]>>> d[1, 2, 3]

b、c、d都是自身带有值的新对象,与原始的a所指向的列表对象[1,2,3]没有任何关联。
对列表a做的修改不影响b、c、d。

3.3 元组

3.3.1 使用()创建元组

>>> a_tuple = (3,5,2,7)>>> a,b,c,d = a_tuple>>> a3>>> b5>>> c2>>> d7

以上为元组解包。

3.3.2 元组与列表

在许多地方都可以用元组代替列表,但元组的方法函数与列表相比要少一些——元组没有append()、 insert(),等等——因为一旦创建元组便无法修改。既然列表更加灵活,那为什么不在所有地方都使用列表呢?原因如下所示:

  • 元组占用的空间较小
  • 你不会意外修改元组的值
  • 可以将元组用作字典的键(详见 3.4 节)
  • 命名元组(详见第 6 章“命名元组”小节)可以作为对象的替代
  • 函数的参数是以元组形式传递的(详见 4.7 节)

3.4 字典

在其他语言中,字典可能会被称作关系型数组哈希表哈希图

3.4.1 使用{}创建字典

3.4.2 使用dict{}转换为字典

>>> list1 = [['a','b'],['c','d'],['e','f']]>>> dict(list1){'c': 'd', 'a': 'b', 'e': 'f'}

包含双值元组的列表:

>>> lot = [ ('a', 'b'), ('c', 'd'), ('e', 'f') ]>>> dict(lot){'c': 'd', 'a': 'b', 'e': 'f'}

包含双值列表的元组:

>>> tol = ( ['a', 'b'], ['c', 'd'], ['e', 'f'] )>>> dict(tol){'c': 'd', 'a': 'b', 'e': 'f'}

双字符的字符串组成的列表:

>>> los = [ 'ab', 'cd', 'ef' ]>>> dict(los){'c': 'd', 'a': 'b', 'e': 'f'}

双字符的字符串组成的元组:

>>> tos = ( 'ab', 'cd', 'ef' )>>> dict(tos){'c': 'd', 'a': 'b', 'e': 'f'}

3.4.3 使用[key]添加或修改元素

>>> list2 = {'a':'1', 'b':'2', 'c':'3'}>>> list2['d'] = 4>>> list2{'c': '3', 'a': '1', 'd': 4, 'b': '2'}

3.4.4 使用update()合并字典

>>> other = {'e': '5'}>>> list2.update(other)>>> list2{'c': '3', 'a': '1', 'd': 4, 'e': '5', 'b': '2'}

3.4.5 使用del删除具有指定键的元素

>>> list2{'c': '3', 'a': '1', 'd': 4, 'e': '5', 'b': '2'}>>> del list2['a']>>> list2{'c': '3', 'd': 4, 'e': '5', 'b': '2'}>>> del list2['b']>>> list2{'c': '3', 'd': 4, 'e': '5'}

3.4.6 使用clear()删除所有元素

使用clear(),可以将字典中所有元素删除:

>>> list2{'c': '3', 'd': 4, 'e': '5'}>>> list2.clear()>>> list2{}

3.4.7 使用in判断是否存在

in可以判断某一个键是否存在于一个字典中。

>>> list3 = {'a':'1', 'b':'2', 'c':'3'}>>> 'a' in list3True

3.4.8 使用[key]获取元素

使用[key],形式:
dict[key]
使用in判断
使用字典函数get()。需要指定字典名、键、一个可选值。

>>> list3 = {'a':'1', 'b':'2', 'c':'3'}>>> list3.get('a')'1'

3.4.9 使用keys()获取所有值

>>> list3 = {'a':'1', 'b':'2', 'c':'3'}>>> list3.keys()dict_keys(['c', 'a', 'b'])>>> list(list3.keys())['c', 'a', 'b']

注意 在Python 2里,keys()会返回一个列表,而在Python 3中则会返回dict_keys(),它是键的迭代形式。这种返回形式对于大型的字典非常有用,因为它不需要时间和空间来创建返回的列表。有时你需要的可能就是一个完整的列表,但在Python 3中,你只能自己调用list()将dict_keys转换为列表类型。

>>> list3 = {'a':'1', 'b':'2', 'c':'3'}>>> list3.keys()dict_keys(['c', 'a', 'b'])>>> list(list3.keys())['c', 'a', 'b']

3.4.10 使用values()获取所有值

使用values()可以获取字典中的所有值:

>>> list3 = {'a':'1', 'b':'2', 'c':'3'}>>> list(list3.values())['3', '1', '2']

3.4.11 使用items()获取所有键值对

每一对键值对以元组的形式返回:

>>> list3 = {'a':'1', 'b':'2', 'c':'3'}>>> list(list3.items())[('c', '3'), ('a', '1'), ('b', '2')]

3.4.12 使用=赋值,使用copy()复制

与列表一样,对字典内容的修改会反映到所有与之相关联的变量名上:

>>> list3 = {'a':'1', 'b':'2', 'c':'3'}>>> list4 = list3>>> list4['e'] = '5'>>> list3{'c': '3', 'a': '1', 'e': '5', 'b': '2'}

解决办法是:使用copy()将字典复制到一个新的字典中:

>>> list3 = {'a':'1', 'b':'2', 'c':'3'}>>> list5 = list3.copy()>>> list5['g'] = '7'>>> list3{'c': '3', 'a': '1', 'b': '2'}

3.5 集合

3.5.1 使用set()创建集合

可以使用set()函数,或者用大括号将一系列以逗号隔开的值包裹起来,如下:

>>> set1 = set()>>> set1set()>>> set2 = {0, 2, 4, 6, 8}>>> set2{8, 0, 2, 4, 6}

字典是无序的。
注意 由于[]能创建一个空列表,你可能期望{}也能创建空集。但事实上,{}会创建一个空字典,这也是为什么交互式解释器把空集输出为set()而不是{}。为何如此?没有什么特殊原因,仅仅是因为字典出现的比较早并抢先占据了花括号。

3.5.2 使用set()将其他类型转换为集合

可以利用已有列表、字符串、元组、字典的内容来创建集合,其中重复的值会被丢弃

>>> set('letter'){'l', 'e', 't', 'r'}

当字典作为参数被传入set函数时,只有键会被使用:

>>> dict2 = {'a':'1', 'b':'2', 'c': '3'}>>> set(dict2){'c', 'a', 'b'}

3.5.3 使用in测试值是否存在

3.5.4 合并及运算符

暂时跳过吧

3.6 比较几种数据结构

3.7 建立大型数据结构

没什么意思,不看了。

参考文献:
1. 《Python语言及其应用》。

阅读全文
0 0
原创粉丝点击