[Python学习路线]--Python基础no.06

回顾上次所学,简单了解了在Python中有返回值、无返回值、有参、无参的函数。本节将学习的是Python中的list, tuple, dict, set这种复合的高级数据类型。

1. List

list是一个有序集合。像Array一样可以在其后加入[x]的形式来访问其第x个元素。其中x可以为负数,当其为负数时表示倒数第几个。比如 list[-1] 表示list中倒数第一个元素。

List的相关操作函数

Method Description
list.append(x) 把一个元素添加到列表的结尾]。
list.extend(L) 通过添加指定列表的所有元素来扩充列表。
list.insert(i, x) 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。
list.remove(x) 删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i]) 从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除
list.clear() 移除列表中的所有项。
list.index(x) 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
list.count(x) 返回 x 在列表中出现的次数。
list.sort() 对列表中的元素进行排序。
list.reverse() 倒排列表中的元素。
list.copy() 返回列表的浅复制。
# List的使用


a = [66.66, 777, 777, 1, 131.13]
# count
print("a.count(777), a.count(66.66), a.count(2)")
print(a.count(777), a.count(66.66), a.count(2))
print(a)

# insert
print("a.insert(2, -1)")
a.insert(2, -1)
print(a)
# append
print("a.append(777)")
a.append(777)
print(a)
# index
print("a.index(777)")
print(a.index(777))
print(a)
# remove
print("a.remove(777)")
a.remove(777)
print(a)
# reverse
print("a.reverse()")
a.reverse()
print(a)
# sort
print("a.sort()")
a.sort()
print(a)
FANGQIdeMacBook-Pro:PythonStudy fangqi$ python3 ex16.py 
a.count(777), a.count(66.66), a.count(2)
2 1 0
[66.66, 777, 777, 1, 131.13]
a.insert(2, -1)
[66.66, 777, -1, 777, 1, 131.13]
a.append(777)
[66.66, 777, -1, 777, 1, 131.13, 777]
a.index(777)
1
[66.66, 777, -1, 777, 1, 131.13, 777]
a.remove(777)
[66.66, -1, 777, 1, 131.13, 777]
a.reverse()
[777, 131.13, 1, 777, -1, 66.66]
a.sort()
[-1, 1, 66.66, 131.13, 777, 777]

2. Tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。

>>> a = ('aaa', 'bbb', 'ccc')

现在,a这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,可以正常地使用a[0],a[-1],但不能赋值成另外的元素。
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

# tuple


a = (1, 2, 3, 1)
print("a.count(1), a.count(2), a.count(4)")
print(a.count(1), a.count(2), a.count(4))
print(a)
print("a[0], a[1], a[-2]")
print(a[0], a[1], a[-2])

print("a.index(3)")
print(a.index(3))
FANGQIdeMacBook-Pro:PythonStudy fangqi$ python3 ex17.py 
a.count(1), a.count(2), a.count(4)
2 1 0
(1, 2, 3, 1)
a[0], a[1], a[-2]
1 2 3
a.index(3)
2

同List相比tuple的区别

  • tuple不可以修改,但可以拼接 使用+操作符
  • tuple不可以删除特定元素,但可以删除整个tuple ,使用del tuple
  • tuple 方法只有index() 和 count()

3. Dict

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]

给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。
如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。
第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。
dict就是第二种实现方式,给定一个名字,比如'Michael',dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。
你可以猜到,这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。

  • del 操作
a = {'Name': 'xiao7', 'Age': 1, 'Class': 'First'}

del a['Name']  # 删除键 'Name'
print(a)

Python中dict包含了以下内置函数:

序号 函数 描述
1 len(dict) 计算字典元素个数,即键的总数。
2 str(dict) 输出字典,以可打印的字符串表示。
3 type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。

Python中dict包含了以下内置方法:

序号 函数及描述
1 radiansdict.clear()删除字典内所有元素
2 radiansdict.copy()返回一个字典的浅复制
3 radiansdict.fromkeys()创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4 radiansdict.get(key, default=None)返回指定键的值,如果值不在字典中返回default值
5 key in dict如果键在字典dict里返回true,否则返回false
6 radiansdict.items()以列表返回可遍历的(键, 值) 元组数组
7 radiansdict.keys()返回一个迭代器,可以使用 list() 来转换为列表
8 radiansdict.setdefault和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9 radiansdict.update(dict2)把字典dict2的键/值对更新到dict里
10 radiansdict.values()返回一个迭代器,可以使用 list() 来转换为列表
11 pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12 popitem()随机返回并删除字典中的一对键和值(一般删除末尾对)。

4. Set

集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 这里演示的是去重功能
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 快速判断元素是否在集合内
True
>>> 'crabgrass' in basket
False
 
>>> # 下面展示两个集合间的运算.
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
>>> a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b                              # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

Python中set包含了如下内置函数:

序号 函数 描述
1 add() 添加元素s.add("abc")
2 update() 添加元素s.update(abc)
3 remove() 移除元素s.remove(abc) 注:如果元素不存在则报错
4 discard() 移除元素s.discard(abc) 注:如果元素不存在不会报错
5 pop() 随机删除一个元素,并且返回其值x = s.pop()
6 in 判断是否存在x in s,若存在返回True,不存在返回False
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,135评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,317评论 3 397
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,596评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,481评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,492评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,153评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,737评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,657评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,193评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,276评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,420评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,093评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,783评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,262评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,787评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,427评论 2 359

推荐阅读更多精彩内容

  • 一、python 变量和数据类型 1.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序...
    绩重KF阅读 1,712评论 0 1
  • 最近在慕课网学习廖雪峰老师的Python进阶课程,做笔记总结一下重点。 基本变量及其类型 变量 在Python中,...
    victorsungo阅读 1,699评论 0 5
  • 与或运算 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此...
    张文靖同学阅读 316评论 0 1
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,748评论 0 10
  • “涉江采芙蓉,兰泽多芳草⋯⋯” “怿哥哥,别老背书了,快看我摘的花,是不是很漂亮!”女孩子红扑扑的脸颊冒着细汗,边...
    青玉良人阅读 472评论 0 1