美文网首页
06 - 关于几种容器数据类型

06 - 关于几种容器数据类型

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

1.列表(补充)

(1)修改列表元素

通过下标获取元素,然后重新赋值:(下标不能越界)
方法:列表名[下标] = 新的值

names = ['周星驰', '渣渣辉', '古天乐', '黄渤', '杨洋']
names[-1] = '李健'
print(names)    # ['周星驰', '渣渣辉', '古天乐', '黄渤', '李健']

(2).列表的其他操作

  • len() 获取列表长度
  • 列表1 + 列表2 将列表1和列表2的元素组合在一起,产生一个新的列表
  • 列表 * n 让列表中的元素重复n次,产生一个新的列表
  • in ,not in 判断元素是否在列表里面

(3).获取列表中最大,最小的元素

  • max(列表)
  • min(列表)

(4).其他方法

  1. count:获取指定元素在列表中出现的次数
    列表.count(元素)

  2. extend:将一个序列中的每一个元素,添加到列表中.(与 + 不同,extend不产生新的列表)

names = ['周星驰', '渣渣辉', '古天乐', '黄渤', '李健']
names.extend(['王祖贤'])
print(names)
names.extend('王祖贤')
print(names)

['周星驰', '渣渣辉', '古天乐', '黄渤', '李健', '王祖贤']
['周星驰', '渣渣辉', '古天乐', '黄渤', '李健', '王祖贤', '王', '祖', '贤']

  1. 列表.index(元素):获取指定元素在指定列表中的索引(如果元素有多个,取第一个)

  2. 列表.reverse():将列表中的元素顺序反向 ,并不会产生新的列表

  3. 列表.sort():对列表进行排序

nums = [12, 32, 65, 13, 7, 85]
nums.sort()     # 升序
print(nums)
nums.sort(reverse=True)   #降序
print(nums)

[7, 12, 13, 32, 65, 85]
[85, 65, 32, 13, 12, 7]

  1. 列表.clear() 清空列表元素,相当于: 列表=[ ]
    列表.copy():将列表中的元素全部拷贝一份创建一个新的列表,相当于 列表[ : ]
list1 = [1,2,3,4,5]
list2 = list1.copy()
print(list1)
print(list2)

2.元组

(1).什么是元组

元组就是不可变的列表
元组值: a.使用()将元素包含起来,多个元素之间用逗号隔开,比如:(1,2,'abc')
                 b.元素的类型可以是任何的类型

(2).增删改查操作

因为元组的特性,增、删、改的操作不能用于元组。但是可以查询

colors = ('red', 'green', 'yellow', 'purple')

# 查:(同列表的操作方式)
print(colors[1])
print(colors[0::2])

green
('red', 'yellow')

len() 、 in和not in 、 +和* 、(方法同列表)
将元组转化为列表:
colors = ('red', 'green', 'yellow', 'purple')
list1 = list(colors)
print(list1, type(list1))

['red', 'green', 'yellow', 'purple'] <class 'list'>

(3).元组补充:获取元组的元素

names = (1, 2, 3, 4, 5, 6)
x, y, z, a, b, c = names            #通过多个变量分别获取元组的元素
print(x, y, z, a, b, c)             #变量的数量必须与元素数量相等

a, *b, c = names            # 用*可以获取不定长度的元素序列,*对应的变量则变成列表
print(a, b, c)

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

3.字典

字典也是一种容器类型的数据类型(序列),存的数据是以键值对的形式出现的,字典中的元素全部都是键值对。
字典是可变的(可增删改),但是是无序的(不能使用下标)
字典的组成:
        键:值(key:value) 值才是真正要存的内容,key这是存值的一方式
        键: a.理论上可以使任何不可变的数据类型,但是实际开发的时候一般使用字符串作为key
              b.键是唯一的,如果存在相同的键,则后面赋的值,会覆盖前面的值
        值:可以是任意数据类型的数据

(1)字典的声明

dict1 = {}
dict2 = {'a': 1, 'b': 2, 'c': 3}

(2).字典的增删改查

a.查:

即:获取字典的元素的值,字典获取元素的值是通过key来获取的
注意:如果确定key值存在的时候,使用[]方式获取
          如果不确定key是否存在的时候,使用get()方法获取

  • 字典[key]
person = {'name': '路飞', 'age': 17, 'face': 90}
print(person['name'], person['face'])
# print(person['aaa'])  # 如果key不存在,则会报错:key Error
  • 字典.get(key)
print(person.get('name'))
print(person.get('aaa'))        # 通过get方法,如果key不存在,返回none,不会报错
b.增加元素/修改元素

通过key获取字典元素,然后赋值。当key本身就存在的时候,就是在修改元素的值,不存在的时候就是给字典添加键值对。

person['height'] = 12
print(person)
# {'name': '路飞', 'age': 17, 'face': 90, 'height': 12}

person['age'] = 18
print(person)
# {'name': '路飞', 'age': 18, 'face': 90, 'height': 12}
c.删除
  • del 字典[key]    注意:如果key不存在,会报错
del person['age']
print(person)
# {'name': '路飞', 'face': 90, 'height': 12}
  • 字典.pop(key)    把需要删的键值对取出来,把值保存在别处
he = person.pop('height')
print(person, he)
# {'name': '路飞', 'face': 90} 12   ------此处删除了‘height’对应的键值,并把value赋给了变量he得以保存。

(3)相关的数组属性

  • 字典.keys():获取字典所有的key,返回值的类型是dict_keys,但是可以把他当成列表来使用
  • 字典.values():获取字典所有的值(value)
  • 字典.items():将字典中所有的键值对转换成一个一个的元组,key作为元组的第一个元素,value作为元组的第二个元素
student_dict = {'name': '张三', 'study_id': 'py1805220', 'scores': {'english': 60, 'math':100}}

keys = student_dict.keys()
print(keys, type(keys))
# dict_keys(['name', 'study_id', 'scores']) <class 'dict_keys'>

# 遍历获取每个key
for key in keys:
    print(key)
"""name
study_id
scores
"""
print(student_dict.values(), type(student_dict.values()))
print(student_dict.items(), type(student_dict.items()))
# dict_values(['张三', 'py1805220', {'english': 60, 'math': 100}]) <class 'dict_values'>

(4).遍历字典

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

  • b.遍历直接获取到key和value ------ 不推荐,消耗cpu较高
    for key, value in student_dict.items():
    print(key, value)

(5).列表中有字典、字典中有字典、字典中有列表

"""
声明一个变量,作用是用来存储一个班级的学生的信息。其中学生的信息包括姓名、性别、年龄、电话
至少存3个学生的信息

stu_info = [{'name': '张三', 'age': 15, 'sex': '男', 'tel': '123421323'},   #-------->使用:列表 [{字典}]
            {'name': '李四', 'age': 16, 'sex': '女', 'tel': '123421323223'},
            {'name': '王五', 'age': 18, 'sex': '男', 'tel': '12323232421323'}]

print(stu_info)

(6).其他操作

  • 1.fromkey()
    fromkeys(序列,value):创建一个新的字典,序列中的元素作为key,value作为值
# new_dict = dict.fromkeys('abc', 100)
# new_dict = dict.fromkeys(range(10), 100)
new_dict = dict.fromkeys(['abc', 'edf', '12'], 100)
print(new_dict)

#{'abc': 100, 'edf': 100, '12': 100}
  • 2.in
    key in 字典:判断字典中是否存在指定的key
    value in 字典:判断字典中是否存在指定的value
dog_dict = {'color': 'while', 'age': 3, 'type': '土狗'}
print('age' in dog_dict)

# True
  • 3.update
    字典1.update(字典2):
    使用字典2的键值对去更新字典1中的键值对。如果:字典2中对应的键值对在字典1中不存在就添加到字典1中,如果存在的话,就更新相应的键值对。
dict1 = {'1': 'a', '2': 'b'}
dict2 = {'1': 'aa', '3': 'cc'}
dict1.update(dict2)
print(dict1)

# {'1': 'aa', '2': 'b', '3': 'cc'}

4.集合

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

(1)声明一个集合

set0 = set()    # 创建一个空的集合
set1 = {1, 2, 3, 1, 2, 5}

(2)将其他的数据转换成集合(自带去重功能)

set2 = set('abc123aaa5')
print(set2)
set3 = set([12, 'abc', 'hh', 12, 32, 'abcn'])
print(set3)
print(list(set3))

{'b', '3', 'c', '2', '5', 'a', '1'}
{32, 'hh', 'abcn', 12, 'abc'}
[32, 'hh', 'abcn', 12, 'abc']

(3).增删改查

a.查 : (遍历)

注意:集合没有办法单独通过索引获取某一个元素,需要循环遍历

b.增 / 改
  • 集合.add(元素):在指定的集合中添加指定的元素
set1 = {1, 2, 3}
set1.add(100)
print(set1)

{1, 2, 3, 100}

  • 集合1.update(集合2):将集合2中的元素添加到集合1中,并自动去重
    set1.update(set2)
c.删
  • remove()
    集合.remove(元素):在指定的集合中删除指定的元素
  • pop()删除是随机删除一个元素
    集合.pop()

(4).判断是否包含

集合1 >= 集合2 -- 判断集合1中是否包含集合2
集合1 <= 集合2 -- 判断集合2中是否包含集合1
print({1, 2, 4} >= {1, 2, 3, 4, 5}) # False

(5).数学中的集合运算

"""求并集 |  """
print({1, 2, 3} | {2, 4, 5})  #{1, 2, 3, 4, 5}

"""求交集 &  """
print({1, 2, 3, 4} & {2, 4, 5})  #{2, 4}

"""求差集  -  """  
print({1, 2, 3, 5} - {2, 3, 4, 7})  #{1, 5}

"""求补集  ^  """
print({1, 2, 4} ^ {1, 2, 3, 4, 5})  #{3, 5}

(6)其他方法

集合.clear():清楚集合内容

print(set1.clear())  #None

相关文章

  • 06 - 关于几种容器数据类型

    1.列表(补充) (1)修改列表元素 通过下标获取元素,然后重新赋值:(下标不能越界)方法:列表名[下标] = 新...

  • python中的Collections模块

    Collections模块 此模块实现了专门的容器数据类型,为Python的通用内置容器提供了替代方案。 以下几种...

  • 关于iOS系统的数据类型在响应copy和mutableCopy方

    关于系统的容器类和非容器类的数据类型在响应copy和mutableCopy方法有些区别。

  • C++ STL set详解

    一.解释 关于set,必须说明的是set关联式容器。 set作为一个容器也是用来存储同一数据类型的数据类型,并且能...

  • 阮一峰JS教程读后感(一)数据类型(上)

    数据类型相关问题 关于JavaScript JavaScript有几种数据类型 2.NaN是什么意思? 3.nul...

  • java第一天

    一个字节:00000000 数据类型的转型: 每个数据类型都是一个容器,小的容器可以进入大的容器,大的容器无法把自...

  • STL容器set基础使用

    STL容器之set 一、什么是set? set关联式容器。 set作为一个容器也是用来存储同一数据类型的数据类型,...

  • 一文搞懂Python程序语句

    程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple容器类型 String容器类...

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

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

  • 数组

    定义数组容器 * 定义数组容器,要素,强制数据类型的语言 * 必须有数据类型,大小(就是存储数据的个数) * ...

网友评论

      本文标题:06 - 关于几种容器数据类型

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