Python学习(四):列表&字典操作

131 阅读7分钟

1.列表操作

1.1 遍历

if __name__ == "__main__":
    name_list = ["张三", "李四", "王五", "老鳖"]
    ## ************** 只遍历名称******************
    for name in name_list:
        print(name)

    # *****************遍历k和v**********************
    for k, v in enumerate(name_list):
        print("k:{} v:{}".format(k, v))
        
# 张三
# 李四
# 王五
# 老鳖
# k:0 v:张三
# k:1 v:李四
# k:2 v:王五
# k:3 v:老鳖

1.2 统计

if __name__ == "__main__":
    number_list = [1, 2, 3, 4, 5, 5, 4, 2]
    print("统计元素个数:", len(number_list))
    print("统计元素5出现的个数:", number_list.count(5))
    print("列表中最大的元素:", max(number_list))
    print("列表中最小的元素:", min(number_list))
    print("元素之和:", sum(number_list))
    
# 统计元素个数: 8
# 统计元素5出现的个数: 2
# 列表中最大的元素: 5
# 列表中最小的元素: 1
# 元素之和: 26

1.3 去重(转集合)

if __name__ == "__main__":
    # 定义列表
    list_var = [1, 2, 3, 3, 2, 1]
    # 转为集合
    set_var = set(list_var)
    print("set_var:", set_var)
    print("set_var type:", type(set_var))
    
# set_var: {1, 2, 3}
# set_var type: <class 'set'>

1.4 追加元素

if __name__ == "__main__":
    list_var = [1, 3, 4, 5]
    # 末尾追加元素
    list_var.append(100)
    print("末尾追加元素 list_var: ", list_var)
    # 指定位置追加元素,在索引=1的位置,加上2
    list_var.insert(1, 2)
    print("指定位置追加元素 list_var: ", list_var)
    # 追加一个集合
    list_var2 = [6, 7, 8]
    list_var.extend(list_var2)
    print("追加一个集合 list_var: ", list_var)
    
# 末尾追加元素 list_var:  [1, 3, 4, 5, 100]
# 指定位置追加元素 list_var:  [1, 2, 3, 4, 5, 100]
# 追加一个集合 list_var:  [1, 2, 3, 4, 5, 100, 6, 7, 8]   

1.5 删除元素

if __name__ == "__main__":
    list_var = [1, 5, 4, 2, 5, 7, 3, 8, 9]
    print("原始元素: ", list_var)
    # 删除最后一个元素
    list_var.pop()
    print("删除最后一个元素后: ", list_var)
    # 删除索引=2的元素
    list_var.pop(2)
    print("删除索引=2的元素后: ", list_var)
    # 删除值=5的元素
    list_var.remove(5)
    print("删除值=5的元素后: ", list_var)
    # 清空整个列表
    list_var.clear()
    print("清空整个列表后: ", list_var)
    
    
# 原始元素:  [1, 5, 4, 2, 5, 7, 3, 8, 9]
# 删除最后一个元素后:  [1, 5, 4, 2, 5, 7, 3, 8]
# 删除索引=2的元素后:  [1, 5, 2, 5, 7, 3, 8]
# 删除值=5的元素后:  [1, 2, 5, 7, 3, 8]
# 清空整个列表后:  []

@注意:删除之前都需要判断,被删的元素或索引是否存在,否则会报异常。

1.6 反转和排序

if __name__ == "__main__":
    list_var = [1, 5, 4, 3, 7]
    print("原始元素: ", list_var)
    # 反向排列
    list_var.reverse()
    print("反向排列: ", list_var)
    # 正序排序
    list_var.sort(reverse=False)
    print("正序排序: ", list_var)
    # 降序排序
    list_var.sort(reverse=True)
    print("降序排序: ", list_var)
    
    
# 原始元素:  [1, 5, 4, 3, 7]
# 反向排列:  [7, 3, 4, 5, 1]
# 正序排序:  [1, 3, 4, 5, 7]
# 降序排序:  [7, 5, 4, 3, 1]

1.7 传参和复制

def changeList(names):
    for k, v in enumerate(names):
        names[k] = "{}|".format(v)
    return names

if __name__ == "__main__":
    name_list = ["张三", "李四", "王五", "老鳖"]
    print("修改前,name_list:", name_list)
    changeList(name_list)
    # 修改后
    print("修改后,name_list:", name_list)
    
# 修改前,name_list: ['张三', '李四', '王五', '老鳖']
# 修改后,name_list: ['张三|', '李四|', '王五|', '老鳖|']    

从上面例子可以看出,列表属于引用数据类型,即在函数内修改,函数外面也会生效,所以当把列表当参数传时特别要注意,如果不想函数外也跟着变化,可以传副本。

if __name__ == "__main__":
    name_list = ["张三", "李四", "王五", "老鳖"]
    print("原列表内存地址:", id(name_list))
    # 使用copy复制列表
    name_copy = name_list.copy()
    print("使用copy复制列表:", id(name_copy))
    # 使用:复制列表
    name_copy2 = name_list[:]
    print("使用:复制:", id(name_copy2))
    
# 原列表内存地址: 4384686272
# 使用copy复制列表: 4384636480
# 使用:复制: 4384635968

2. 集合操作

@注: 集合也支持 clear、pop、copy、remove方法

2.1 追加和删除

if __name__ == "__main__":
    set1 = {1, 2, 3}
    set1.add(10)
    print("添加元素10后:", set1)
    # 使用discard删除元素,元素不存在也不会报错
    print("删除元素100后:", set1.discard(100))
    # 删除元素
    print("删除元素10后:", set1.discard(1))
    
# 添加元素10后: {10, 1, 2, 3}
# 删除元素100后: None
# 删除元素10后: None    

discardremove函数功能一样,都是删除指定元素;唯一的区别是: 如果去除的元素不存在,remove()会引发一个KeyError,而discard()不会返回任何异常。

2.2 求并集

if __name__ == "__main__":
    set1 = {1, 3, 5, 7}
    set2 = {1, 2, 4, 6, 8, 10}
    # 使用符号 | 求并集
    print("使用符号 | 求并集:", set1 | set2)
    print("使用函数 union 求并集:", set1.union(set2))
    
# 使用符号 | 求并集: {1, 2, 3, 4, 5, 6, 7, 8, 10}
# 使用函数 union 求并集: {1, 2, 3, 4, 5, 6, 7, 8, 10}

2.3 求交集

if __name__ == "__main__":
    set1 = {1, 3, 5, 7, 8}
    set2 = {1, 2, 4, 6, 8, 10}
    # 使用符号 & 求交集
    print("使用符号 & 求交集:", set1 & set2)
    print("使用函数 intersection 求交集:", set1.intersection(set2))
    
# 使用符号 & 求交集: {8, 1}
# 使用函数 intersection 求交集: {8, 1}

2.4 求差集

if __name__ == "__main__":
    set1 = {1, 2, 3}
    set2 = {1, 2, 4}
    # 相对set1求差集
    print("set1求差集,使用符号 - 求差集:", set1 - set2)
    print("set1求差集,使用函数 difference 求交集:", set1.difference(set2))
    # 相对set2求差集
    print("set2求差集,使用符号 - 求差集:", set2 - set1)
    print("set2求差集,使用函数 difference 求交集:", set2.difference(set1))
    
    
# set1求差集,使用符号 - 求差集: {3}
# set1求差集,使用函数 difference 求交集: {3}
# set2求差集,使用符号 - 求差集: {4}
# set2求差集,使用函数 difference 求交集: {4}

2.5 求对称差集

if __name__ == "__main__":
    set1 = {1, 2, 3}
    set2 = {1, 2, 4}
    # 相对set1求对称差集
    print("set1求对称差集,使用符号 - 求差集:", set1 ^ set2)
    print("set1求对称差集,使用函数 difference 求交集:", set1.symmetric_difference(set2))
    
# set1求对称差集,使用符号 - 求差集: {3, 4}
# set1求对称差集,使用函数 difference 求交集: {3, 4}  

2.6 判断子集和超集

if __name__ == "__main__":
    set1 = {1, 2, 3}
    set2 = {4, 5, 6}
    set3 = {1, 3, 5}
    # 判断两个集合是否有交集
    print("set1和set2有交集?:", set1.isdisjoint(set2))
    print("set1和set3有交集?:", set1.isdisjoint(set3))

    # 判断是否是子集
    set4 = {1, 2}
    print("set4是set1的子集?:", set4.issubset(set1))
    print("set4是set2的子集?:", set4.issubset(set2))

    # 判断是否是超级
    print("set1是set4的超集?:", set1.issuperset(set4))
    print("set2是set4的超集?:", set2.issuperset(set4))
      
# set1和set2有交集?: True
# set1和set3有交集?: False
# set4是set1的子集?: True
# set4是set2的子集?: False
# set1是set4的超集?: True
# set2是set4的超集?: False    

3.字典

3.1 转字符串

if __name__ == "__main__":
    map_v1 = {"name": "张三", "age": 20, "sex": "男"}
    print("转字符串: ", str(map_v1))
    
# {'name': '张三', 'age': 20, 'sex': '男'}

3.2 遍历

if __name__ == "__main__":
    map_v1 = {"name": "张三", "age": 20, "sex": "男"}
    for k, v in map_v1.items():
        print("k: {} v:{} ".format(k, v))
        
# k:name v:张三 
# k:age v:20 
# k:sex v:男

3.3 key是否存在

if __name__ == "__main__":
    map_v2 = {"name": "张三", "age": 23, "sex": "男", "home": "北京"}
    print("key = name 是否存在: ", "name" in map_v2)
    print("key = city 是否存在: ", "city" in map_v2)
    
# key = name 是否存在:  True
# key = city 是否存在:  False    

3.4 获取key和val

if __name__ == "__main__":
    map_v1 = {"name": "张三", "age": 20, "sex": "男"}
    # 获取所有key
    keys = map_v1.keys()
    print("所有key:{} 类型: {}".format(keys, type(keys)))
    # 转成list在访问
    print("转成list,在访问: ", list(keys)[0])
    # 获取所有val
    values = map_v1.values()
    print("所有values:{} 类型: {}".format(values, type(values)))
    
# 所有key:dict_keys(['name', 'age', 'sex']) 类型: <class 'dict_keys'>
# 转成list,在访问:  name
# 所有values:dict_values(['张三', 20, '男']) 类型: <class 'dict_values'>    

3.5 重置map值

if __name__ == "__main__":
    map_v1 = {"语文": 60, "英语": 40, "数学": 73}
    keys = map_v1.keys()
    # 重置map_v1的值
    newMap = map_v1.fromkeys(keys, 100)
    print("重置map_v1值为100后: ", newMap)
    # 基于列表创建
    list_v1 = ["张三", "李四", "王五"]
    age_map = {}.fromkeys(list_v1, 18)
    print("基于列表创建map: ", age_map)

3.6 字典合并

if __name__ == "__main__":
    map_v1 = {"语文": 60, "英语": 40, "数学": 73}
    map_v2 = {"化学": 50, "英语": 66}
    map_v1.update(map_v2)
    print("map_v1: ", map_v1)
    
# map_v1:  {'语文': 60, '英语': 66, '数学': 73, '化学': 50}

用字典: map_v2 更新 map_v1,如果key一样,则用map_v2覆盖map_v1。

3.7 删除元素

if __name__ == "__main__":
    # 删除指定的key
    map_v1 = {"语文": 60, "英语": 40, "数学": 73, "化学": 50}
    map_v1.pop("语文")
    print("删除 key=语文:", map_v1)

    map_v2 = {"name": "张三", "age": 23, "sex": "男", "home": "北京"}
    # 删除最后一对键和值
    res = map_v2.popitem()
    print("删除最后一对键和值->并返回: ", res)
    print("删除最后map_v2: ", map_v2)
    
# 删除 key=语文: {'英语': 40, '数学': 73, '化学': 50}
# 删除最后一对键和值->并返回:  ('home', '北京')
# 删除最后map_v2:  {'name': '张三', 'age': 23, 'sex': '男'}

3.8 读取key

if __name__ == "__main__":
    map_v2 = {"name": "张三", "age": 23, "sex": "男", "home": "北京"}
    print("key存在,key:name value: {}".format(map_v2.get("name", "")))
    print("key不存在,key:city value: {} ".format(map_v2.get("city", "未知")))
    
# key存在,key:name value: 张三
# key不存在,key:city value: 未知 

微信搜索【猿码记】查看更多文章

本文由mdnice多平台发布