day06 容器型数据 2018-07-23

一、列表

增、删、改、查

1. 修改列表元素
  • 通过下标查找然后重新赋值: 列表名[下标] = 新的值
    注意: 下标不能越界
names = ['古天乐','张家辉','刘德华','吴亦凡']
names[-1] = '王祖贤'  # 获取单个元素下标不能越界
print(names[-10:10])  # 切片时下标可以越界

['古天乐', '张家辉', '刘德华', '王祖贤']

2. 列表的其他操作

a. len(列表): 获取列表长度
b. 列表1 + 列表2: 让列表1和列表2的元素组合在一起产生一个新的列表
c. [列表] * N(整数) = [列表,列表,...,一共N个]
d. in, not in

M = [1, 2, 3]
L = len([1, 2, 3, 4, 5])
print(L,M*2,M + [4, 5, 6])

5 [1, 2, 3, 1, 2, 3]  [1, 2, 3, 4, 5, 6]  True  True

3. 获取列表中最大的元素和最小的元素
  • max(列表):获取列表中值最大的元素(当值为字符串时,执行字符串的比较方法,返回编码值最大的元素)
  • min(列表):获取列表中值最小的元素(当值为字符串时,执行字符串的比较方法,返回编码值最小的元素)
print(max([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]))
print(max(['a','b','c','d']))

# 不使用函数获取列表中的最大值
max1 = M[0]
for item in M:
    if item > max1:
        max1 = item
print(max1)

9
d
3

4. 其他方法

a. 列表.count(元素): 统计指定元素在列表中出现的次数
b. 列表.extend(序列): 将序列中的每一个元素添加到列表中
c. 列表.index(元素): 获取列表中指定元素的索引(有多个相同元素时取第一个值)
d. 列表.reverse(): 反向排列列表中的元素(直接操作原列表)
e. 列表.sort(): 对列表元素进行排序
f. 列表.clear(): 清空列表中的元素
g. 列表.copy(): 将列表中的元素全部拷贝一份创建一个新的列表

# 输出'刘德华'在names中出现的次数
print(names.count('刘德华'))

# 在names中添加'烤面包'
names.extend(['烤面包'])
print(names)

# 打印'刘德华'元素所对应的索引值
print(names.index('刘德华'))

# 将names反向排列
names.reverse()
print(names)

# 列表以升序排列
M.sort() # 升序
print(M)

# 列表以降序排列
M.sort(reverse=True) # 降序
print(M)

# 清空列表
M.clear()
print(M)

# 列表对列表赋值的时候是地址的传递,,改变其中一个列表,会对另一个列表产生同样的影响
n = names.copy() # 等同于names = M[:]
print(n)

1
['古天乐', '张家辉', '刘德华', '王祖贤', '烤面包']
2
['烤面包', '王祖贤', '刘德华', '张家辉', '古天乐']
[1, 2, 3]
[3, 2, 1]
[ ]
['烤面包', '王祖贤', '刘德华', '张家辉', '古天乐']


二、元组

1. 什么是元组

元组就是不可变的列表,列表中除了可变操作以外,其他操作都适用于元组

  • 元组值: 使用()将元素包含起来,多个元素间用逗号隔开,例如:(1, 2, 'ABC')
  • 增改删操作不能用于元组,但查找可以
    color = ('红', '橙', '黄', '绿', '青', '蓝', '紫')
# 1. 查找(和列表操作完全相同)
print(color[2])  # 单个取值
print(color[2:5])  # 切片取值
print(color[::2])  # 间隔取值

# 遍历元组
for item in color:
    print(item, end='-')
print('\n')
print('--------------------------')

# 2. len(): 返回元组的长度
print(len(color))
print('--------------------------')

# 3. in, not in  判断元素是否在元组中
print('红' in color)
print('黑' in color)
print('--------------------------')

# 4. + , *
print(color + ('黑', '白'))  # 将一个心元组加入到color中
print(color*2)
print('--------------------------')

# 5.获取元组元素
names = ('name1', 'name2', 'name3')
x, y, z = names  # 通过多个变量获取元组的元素(变量个数和元组长度一致)
print(x, y)

first, *middle, last = names  # 在变量名前加*可以吧变量变成列表,获取多个元素
print(first, middle, last)
a, *b = names  # a获取元组第一个元素, b以列表方式获取剩下的元素
print(a, b)
print('--------------------------')


('黄', '绿', '青')
('红', '黄', '青', '紫')
红-橙-黄-绿-青-蓝-紫-

--------------------------
7
--------------------------
True
False
--------------------------
('红', '橙', '黄', '绿', '青', '蓝', '紫', '黑', '白')
('红', '橙', '黄', '绿', '青', '蓝', '紫', '红', '橙', '黄', '绿', '青', '蓝', '紫')
--------------------------
name1 name2
name1 ['name2'] name3
name1 ['name2', 'name3']
--------------------------


三、字典

 字典也是一种容器类的数据类型(序列),存储的数据时以键值对的形式出现的(字典元素全是键值对)

  • 键值对: 键:值(key:value), 键值对中,key是形式,value才是主要内容
  • 特点: 可变(可以增删改)无序(不能使用下标)
  • 键: 取值理论上可以是任何不可变的数据类型,但实际开发的时候,一般使用字符串作为key
  • 值: 可以是任意数据类型
1. 声明一个字典
#a. 创建一个字典变量
dict1 = {}  # 创建一个空的字典
print(type(dict1))

dict2 = {'a': 1, 'b': 2, 'c': 'BD', (1, 2, 3): 4, 5: [1, 2, 3]}
print(dict2)

# b. 将其他数据类型转换成字典
dict3 = dict([('A', 'B'), ('C', 'D')])
print(dict3)

<class 'dict'>
{'a': 1, 'b': 2, 'c': 'BD', (1, 2, 3): 4, 5: [1, 2, 3]}
{'A': 'B', 'C': 'D'}

2. 字典的增删查改

superhero = {'name': 'Iron Man', 'power': 1200, 'speed': 8}

a. 查:获取字典元素的值
  • 字典获取元素的值是通过key来获取的
# 格式1:字典[key]

print(superhero['name'])
# print(superhero['age'])  # key不存在时会报错

# 格式2:字典.get(key)
print(superhero.get('name'))
print(superhero.get('ABC'))  # 如果key不存在返回None

Iron Man
Iron Man
None

b. 增: 增加元素/修改元素;

 通过key获取字典元素,然后赋值.

  • 当key本身存在的时候就修改元素的值;
  • 不存在的时候就给字典添加键值对.
# key不存在时, 添加新的键值对
superhero['height'] = 1.8
print(superhero)

# key存在时,覆盖key对应的值
superhero['name'] = 'Spider Man'
print(superhero)

{'name': 'Iron Man', 'power': 1200, 'speed': 8, 'height': 1.8}
{'name': 'Spider Man', 'power': 1200, 'speed': 8, 'height': 1.8}

c. 删除: 删除键值对
  • 方法1: del 字典[key]
    **注意: **key不存在会报错
del superhero['height']
print(superhero)

{'name': 'Spider Man', 'power': 1200, 'speed': 8}

  • 方法2: 字典.pop()---会返回被删除的的键值对对应的值
speed = superhero.pop('speed')
print(superhero, speed)

{'name': 'Spider Man', 'power': 1200}  8

3. 相关的数组属性
  • keys(): 获取字典中所有的key,返回值类型是dict_keys,但可以作为列表来使用
  • value(): 获取字典中所有的值(value)
  • items(): 将字典中的每个键值对转化为一个元组(key,value)
student_dict = {'name': '派大星', 'study_id': 'CD18055511', 'score': {'English': 90, 'Math': 100}}
keys = student_dict.keys()
print(keys, type(keys))
# 遍历获取每个key
for key in keys:
    print(key)

print(student_dict.values())
print(student_dict.items())

dict_keys(['name', 'study_id', 'score']) <class 'dict_keys'>



name
study_id
score


dict_values(['派大星', 'CD18055511', {'English': 90, 'Math': 100}])
dict_items([('name', '派大星'), ('study_id', 'CD18055511'), ('score', {'English': 90, 'Math': 100})])

4. 遍历字典
a. 直接遍历字典得到的是所有的key(推荐使用)
for key in student_dict:
    print(key, student_dict[key])

name 派大星
study_id CD18055511
score {'English': 90, 'Math': 100}

b. 遍历直接获取到key和value(会占用更多的CPU资源,不推荐使用)
for key, value in student_dict.items():
    print(key, value)

name 派大星
study_id CD18055511
score {'English': 90, 'Math': 100}

5. 列表中有字典,字典中有字典,字典中有列表

  当遇到一些情况时,需要容器数据的互相嵌套
声明一个变量,作用是用来储存一个班级学生的信息,其中学生的信息包括姓名,性别,年龄,电话
至少存三个学生信息

info_class1 = [{'name': '海绵宝宝', 'gender': '男', 'age': 8, 'tel': '17764827400'},
               {'name': '派大星', 'gender': '男', 'age': 5, 'tel': '17764827401'},
               {'name': '章鱼哥', 'gender': '男', 'age': 15, 'tel': '17764827402'}
               ]
class1 = {
    'name': 'Python1805',
    'address': '19-01',
    'student': info_class1
}
6. 其他操作
a. fromkeys()
  • dict.fromkeys(key序列, value): 创建一个新的字典,序列中的元素为key,value为值
dict1 = dict.fromkeys('abc', 100)
print(dict1)

{'a': 100, 'b': 100, 'c': 100}

2. in
  • key in 字典: 判断字典中是否存在指定的key
dog_dict = {'color': 'white', 'age': 3, 'breed': '哈士奇'}
print('萨摩耶' in dog_dict)
print('color' in dog_dict)

False
True

c. update
  • 字典1.update(字典2): 使用字典2中的键值对去更新字典1中的键值对.如果字典2中的键值对在字典1中不存在,就添加该键值对,否则更新其值.
dict1 = {1:1, 2: 2, 4: 4}
dict1.update({1: 3, 3: 3})
print(dict1)

{1: 3, 2: 2, 4: 4, 3: 3}


四、集合

  集合也是一种容器类型的数据类型(序列): 数据放在{}中, 多个元素之间同逗号隔开:{1,2,3}
  集合是无序的(不能通过索引取值), 可变(可以增删改), 元素是唯一的(不重复的)
  集合可以进行数学中集合的相关操作: 判断是否包含,求交集,并集,差集,补集

1. 如何声明集合
a. 声明一个变量,赋值一个集合
set0 = set()  # 创建一个空集合
set1 = {1, 2, 3}
print(set1, type(set1))

{1, 2, 3} <class 'set'>

b. 将其他类型数据转换成集合
set2 = set('ABCD123')  # 将其他类型数据转换成集合可以去重
print(set2)

set3 = set([1, 2, 4, 5, 2, 3, 'a', 'c'])
print(set3)
print(list(set3))  # 将集合转换成列表

{'1', 'A', 'C', 'D', '2', 'B', '3'}



{1, 2, 3, 4, 5, 'c', 'a'}
[1, 2, 3, 4, 5, 'c', 'a']

2. 增删改查
a. 查: 遍历

注意: 集合无法单独获取某一个元素

set2 = {'1', 'A', 'C', 'D', '2', 'B', '3'}
# 遍历集合
for item in set2:
    print(item)

1
A
C
D
2
B
3

b. 增: 增加元素

set1 = {1, 2, 3}

  • 集合.add(元素):在指定集合添加指定元素
set1.add(4)
print(set1)

{1, 2, 3, 4}

  • 集合1.update(集合2): 将集合2的元素添加到集合1中
set1.update({4, 5})
print(set1)

{1, 2, 3, 4, 5}

c. 删

set1 = {1, 2, 3, 4, 5}

  • 集合.remove(元素):在指定的集合中删除指定的元素
set1.remove(5)
print(set1)

{1, 2, 3, 4}

  • pop()删除是随机删除一个
set1.pop()
print(set1)

{2, 3, 4}

3. 判断是否包含
  •  集合1 >= 集合2 --- 判断集合1是否包含集合2(值是True或False)
  •  集合1 <= 集合2 --- 判断集合2是否包含集合1(值是True或False)
print({1, 2, 3, 4, 5} >= {2, 4, 5})
print({1, 2, 3, 4, 5, 6} <= {1, 3, 4})

True
False

4. 数学的集合运算
  • 求并集: |
print({1, 2, 3, 4} | {2, 3, 4, 5})

{1, 2, 3, 4, 5}

  • 求交集: &
print({1, 2, 3, 4} & {2, 3, 4, 5})

{2, 3, 4}

  • 求差集: -
print({1, 2, 3, 4} - {2, 3, 4, 5})
print({2, 3, 4, 5} - {1, 2, 3, 4})

{1}
{5}

  • 求补集: ^
print({1, 2, 3, 4} ^ {2, 3, 4, 5})

{1, 5}

5. 其他方法

  • clear(): 清空集合
set1.clear()
print(set1)

set()

  • len(): 获取集合中元素的个数
print(len(1, 2, 3))

3


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • 一、快捷键 ctr+b 执行ctr+/ 单行注释ctr+c ...
    o_8319阅读 5,809评论 2 16
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,952评论 17 410
  • 远方有诗,近处有生活。诗是升华了的生活,生活是沉淀了的诗。 我们向往生活能够像诗一样充满神奇,但现实里还有太...
    d69c9301a02e阅读 127评论 1 3
  • 我爷爷的好哥们芒格说,如果我知道我会死在哪里,就不会去那个地方。 risk off摸哒开启! 卖掉了坑子公司结好,...
    妞妞大富翁_椛神阅读 210评论 0 0
  • 今天七点多的时候,我的好朋友来找我玩,那时候我刚还出去了,妈妈告诉了我,我十万火急的骑着自行车,用最快的速度赶到健...
    房junyan阅读 150评论 0 0