美文网首页
day06 容器型数据 2018-07-23

day06 容器型数据 2018-07-23

作者: LPP27149 | 来源:发表于2018-07-23 19:10 被阅读0次

一、列表

增、删、改、查

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


相关文章

  • day06 容器型数据 2018-07-23

    一、列表  增、删、改、查 1. 修改列表元素 通过下标查找然后重新赋值: 列表名[下标] = 新的值注意: ...

  • 7.Python基础数据类型之列表

    Python基础数据类型之列表(容器型数据类型) 列表列表是Python中最基本的数据结构,是一个容器型的数据类型...

  • redis002--容器型数据结构的通用规则

    容器型数据结构的通用规则 list/set/hash/zset 这四种数据结构是容器型数据结构,它们共享下面两条通...

  • Java--容器中使用泛型

      容器相关类都定义了泛型,我们在开发和工作中,在使用容器类时都要使用泛型。这样,在容器的存储数据、读取数据时都避...

  • 常见的容器介绍

    常见的容器介绍 上古容器 Dictionary,key-value型数据结构,已被HashMap代替 HashTa...

  • day-08 总结

    容器性数据 1.元祖(tuple) 1.什么是元祖(tuple) python提供的容器型数据类型,不可变并且有序...

  • python列表

    列表 1.什么是列表(list) 列表是容器型数据类型(序列),将[ ]作为容器的标志,多个元素用逗号隔开。-> ...

  • 《Redis深度历险》读书笔记

    list/set/hash/zset 这四种数据结构是容器型数据结构: 1、create if not exist...

  • 第005篇:元组与数字

    1、元组 1.1、什么是元组(tuple) 元组就是不可变的列表 元组是容器型数据类型,将()作为容器的标志,里面...

  • 第007篇:集合

    1、什么是集合(set) 容器型数据类型,将{}作为容器标志,里面多个元素用逗号隔开;{元素1,元素2,元素3,....

网友评论

      本文标题:day06 容器型数据 2018-07-23

      本文链接:https://www.haomeiwen.com/subject/kdujmftx.html