Python:元组和字典简述

2023-05-16

目录

  • 1.列表的方法
  • 2. for循环遍历列表
    • 2.1 语法
    • 2.2 range()函数
  • 3. 元组
    • 3.1 元组的基本概念
    • 3.2 元组的创建
    • 3.3 元组的解包
      • 3.3.1 *号在解包中的用法
  • 4.字典
    • 4.1 字典的基本概念
    • 4.2 字典的使用
      • 4.2.1 字典的创建
      • 4.2.2 通过Key获取值
      • 4.2.3 字典的通用方法
      • 4.2.4 浅复制

1.列表的方法

列表主要有以下方法:

  1. append() 向列表的最后来添加一个元素
  2. insert() 参数1.插入的位置 2.插入的函数
  3. extend()使用新的序列来扩展当前的序列
  4. clear() 清空序列
  5. pop() 根据索引来删除,并且可以返回被删除的值
  6. remove()删除指定值的元素,remove没有返回值
  7. reverse() 翻转列表
  8. sort()队列表中的元素进行排序,默认是升序,如果是降序要传入参数 reverse = True
    请参考下列代码每个方法的用法:
lst = [1,2,3,4,5]
lst.append(6)
print(lst)
lst.insert(6,7)
print(lst)
lst.extend([8,9])
print(lst)
lst.remove(2)
print(lst)
lst.pop(0)
print(lst)
lst.reverse()
print(lst)
lst.sort()
print(lst)
lst.clear()
print(lst)

下面是调用每一个方法之后的结果:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3]
[3, 4, 5, 6, 7, 8, 9]
[]

2. for循环遍历列表

2.1 语法

for 变量 in 序列(遍历的规则):
代码块

lst = [1,2,3,4,5,6]
for i in lst:
    print(i)

这个代码的执行结果就是:
1
2
3
4
5
6
由此可见,这里for循环就是将lst列表中的元素赋值给了i, 对每个元素分别赋值一次,通过这个方法,我们就可以把lst列表中的每个元素抓取出来。

2.2 range()函数

range()函数的作业可以用来生成一个自然序。range()函数语法:range(start, stop, step)。其中:

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于 range(0, 5)
  • stop: 计数到 stop 结束,但不包括 stop,和列表一样。。例如:range(0, 5) 是[0, 1, 2, 3, 4],没有5
  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
    range()函数经常和for循环一起使用,可以方便我们直接拿出想要的数据。比如2.1当中的列子通过range()函数来实现,就不需要定义一个列表lst:
for i in range(1,7):
    print(i)

这个代码的执行结果和2.1中一样,也是:
1
2
3
4
5
6
由此可见,for循环和range()函数一起使用可以使我们快速让代码执行我们需要的次数。

3. 元组

3.1 元组的基本概念

  • 元组的表现形式是tuple,并且是一个不可变序列。所以当我们希望数据不改变时,我们使用元组,其他时候基本上使用列表。

3.2 元组的创建

  • 元组用()小括号来创建,当元组不是控元组,至少需要有一个逗号,这时括号可以省略。例如:
a = 1,2,
print(a,type(a))

代码的执行结果是:
(1, 2) <class ‘tuple’>

3.3 元组的解包

  • 元组解包指将元组当中的每一个元素都赋值给一个变量,例如:
a,b,c,d = 1,2,3,4,
print(a)
print(b)
print(c)
print(d)

代码的执行结果是:
1
2
3
4
由此可见,原本是(1,2,3,4)的元组分别赋值给了a,b,c,d四个变量

3.3.1 *号在解包中的用法

在解包的时候,在其中一个变量前加上*,代表,按照位置排序,分别赋值给其他变量后,剩余的元素用序列的方式赋值给这个带号的变量,例如:

a,*b,c = 1,2,3,4,
print(a)
print(b)
print(c)

代码执行结果是:
1
[2, 3]
4
由此可见,没有星号的a,和 c 先进行了赋值,按照位置分别是第一个1,和最后一个4,剩下的2,3转换为列表赋值给了b。

4.字典

4.1 字典的基本概念

  • 字典属于⼀种新的数据结构称为映射(mapping)
  • 字典的作⽤和列表类似,都是用来存储对象的容器,列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
  • 在字典中每⼀个元素都有唯⼀的名字,通过这个唯⼀的名字可以找到指定的
  • 元素这个唯⼀的名字我们称之为key 通过key可以快速查询value 也可以称之为值
  • 字典我们也称之为键值对(key-value)结构
  • 每个字典中都可以有多个键值对,而每⼀个键值对我们称其为⼀项(item)
  • 创建⼀个有数据的字典 语法 {key:value}
  • 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool tuple…)
  • 字典的键是不能重复的,如果出现重复的后⾯的会替换前面的
    字典键值对的特点,让我们可以对字典用键来查找值,例如:
d = {'name':'水冰月','age':18,'gender':'女','ability':'美少女变身'}
print(d['name'],d['ability'])

执行结果如下:
水冰月 美少女变身
由此可见,我们通过两个key,name和ability,查找到了他对应的值,水冰月和美少女变身。这就是字典最重要的查找功能。

4.2 字典的使用

4.2.1 字典的创建

  • 字典可以用dict()来创建,也可以讲一个包含有双值子序列的序列转换为字典。
  • 双值序列:就是有2个值的序列,可以是元组,可以是列表,也可以是字符串
  • 子序列:序列当中包含另外一个序列,那么这个元素就是子序列
    例如:
d = dict({'name':'水兵月','ability':'美少女变身'})
a = ('name','蜘蛛侠')
b = ('ability','弹射蜘蛛网')
d1 = dict([a,b])
print(d,type(d))
print(d1,type(d1))

代码执行结果如下:
{‘name’: ‘水兵月’, ‘ability’: ‘美少女变身’} <class ‘dict’>
{‘name’: ‘蜘蛛侠’, ‘ability’: ‘弹射蜘蛛网’} <class ‘dict’>
由此可见,我们用2种方法都成功创建了字典。

4.2.2 通过Key获取值

  • 直接用dict['key’]的方式来获取
  • 可用调用get方法来获取
    例如:
d = dict({'name':'水兵月','ability':'美少女变身'})
result1 = d.get('ability')
result2 = d.get('age')
result3 = d.get('age','没有该键')
print(d['ability'])
print(result1)
print(result2)
print(result3)

代码执行结果如下:

美少女变身
美少女变身
None
没有该键

首先说明,如果我们用dict['key’]来取值,key不存在的话,程序会报错Key Error, 那么我们就可以知道,get方法的好处就是在key不存在的时候可以不报错,并且还可以返回一个默认值。对比result2和result3我们就可以得到此结论。

4.2.3 字典的通用方法

  • in 检查一个值是否在字典中,返回一个布尔值
  • not in 检查一个值是否不在字典中,返回一个布尔值
  • len() 获取字典中键值对的个数
  • pop() 根据key删除字典中的k-v,返回一队k,v的元组
  • popitem() 随机删除字典中的一个k-v,但是一般都会删除最后一个,删除之后会将删除的k-v作为返回值返回,返回一个元组
  • update() 将其他自动中的k-v添加到当前的字典中,如果有重复的key,后面的覆盖前面的。
  • setdefault(key,default)可以向字典中添加key-value,如果字典中的Key已经存在,不会对字典有任何操作或者影响。
  • 删除 可以用del关键字来删除字典中的k-v
  • clear() 清空字典
    请参考下列代码每个方法的用法:
d = {'a':1,'b':2,'c':3}
print('a' in d)
print('a' not in d)
print(len(d))
d.popitem()
print(d)
d.update({'e':4})
print(d)
d.pop('b')
print(d)
d.setdefault('f',5)
print(d)
del d['f']
print(d)
d.clear()
print(d)

下面是调用每一个方法之后的结果:
True
False
3
{‘a’: 1, ‘b’: 2}
{‘a’: 1, ‘b’: 2, ‘e’: 4}
{‘a’: 1, ‘e’: 4}
{‘a’: 1, ‘e’: 4, ‘f’: 5}
{‘a’: 1, ‘e’: 4}
{}

4.2.4 浅复制

首先了解复制与赋值的区别,请看代码:

d = {'a':1,'b':2,'c':3}
d1 = d
d2 = d.copy()
d['b'] = 4
print('d=',d)
print('d1赋值的结果为',d1)
print('d2复制的结果为',d2)

程序执行结果为:
d= {‘a’: 1, ‘b’: 4, ‘c’: 3}
d1赋值的结果为 {‘a’: 1, ‘b’: 4, ‘c’: 3}
d2复制的结果为 {‘a’: 1, ‘b’: 2, ‘c’: 3}
由此可见,赋值的结果会随着原样本的改变而变化,复制的结果不受原样本的影响,这就是复制的特点。

接下来了解浅复制和深复制

import copy
d = {'a':{'name':'水冰月'},'b':2,'c':3}
d1 = d.copy()
d2 = copy.deepcopy(d)
d['a']['name'] = '天线宝宝'
print('d=',d)
print('d1浅复制的结果为',d1)
print('d2深复制的结果为',d2)

代码执行结果如下:
d= {‘a’: {‘name’: ‘天线宝宝’}, ‘b’: 2, ‘c’: 3}
d1浅复制的结果为 {‘a’: {‘name’: ‘天线宝宝’}, ‘b’: 2, ‘c’: 3}
d2深复制的结果为 {‘a’: {‘name’: ‘水冰月’}, ‘b’: 2, ‘c’: 3}

由此可见,当原字典样本中value为一个子字典的时候,我们用copy()这种方法,其复制特点会失效,子字典中的value会随着原字典样本的改变而改变。而我们使用copy.deepcopy这种方法的时候,子字典中的结果不会随着原字典样本的中的value改变而改变。

我们称第一种copy()的方法为浅复制,第二种copy.deepcopy的方法,为深复制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:元组和字典简述 的相关文章

随机推荐

  • 终端程序定义示例

    interrupt 0 外部中断0 interrupt 1 T0中断 interrupt 2 外部中断1 interrupt 3 T1中断 interrupt 4 串口中断 我来告诉你实质 xff1a 单片机的中断处理是这样工作的 xff0
  • lisp学习资料

    中文LISP学习网站 CL HTTP franz com 217条消息 使用hunchentoot搭建Lisp web 服务器 keyboardOTA的博客 CSDN博客
  • GO调用C语言之字符串传递

    C xff1a hello h include lt stdlib h gt include lt stdio h gt include lt string h gt char abc int strnum char str C hello
  • C++-基础语法-cin.getline() 与 cin.get() 的区别,以及getline()函数使用方法

    参考声明 xff1a C 43 43 primer plus https blog csdn net best fiends zxh article details 53064771 https blog csdn net u0114216
  • Kotlin开发中的一些Tips(二)

    接着上一篇 xff0c 最近又整理了一些 1 作用域函数选择 目前有let run with apply 和 also五个作用域函数 官方文档有张表来说明它们之间的区别 xff1a 总结一下有几点区别 xff1a apply和also返回上
  • Jetpack Compose 从入门到入门(一)

    Jetpack Compose 是用于构建原生 Android 界面的新工具包 它使用更少的代码 强大的工具和直观的 Kotlin API xff0c 可以帮助您简化并加快 Android 界面开发 xff0c 打造生动而精彩的应用 它可让
  • Jetpack Compose 从入门到入门(二)

    开始布局部分 这部分我个人感觉没有必要每个组件 属性都详细说到 xff0c 否则篇幅会很长 建立起Compose中的组件与 Android Views的一个对应关系就够了 具体还是需要在实际的使用中去熟悉 1 Column 子元素按竖直顺序
  • Jetpack Compose 从入门到入门(三)

    本篇开始介绍Jetpack Compose 中的修饰符Modifier 修饰符可以用来执行以下操作 xff1a 更改可组合项的大小 布局 行为和外观 添加信息 xff0c 如无障碍标签 处理用户输入 添加高级互动 xff0c 如使元素可点击
  • 【操作系统】Linux系统中直接优化提升CPU性能(已解决)

    文章目录 问题 xff1a 服务器CPU没有调用最高性能 xff0c 导致跑算法的时候处理速度慢一 BIOS方法二 终端直接设置CPU调节器方法1 查看当前CPU调节器2 安装各种依赖库3 最后安装cpufrequtis工具包并设置CPU调
  • Jetpack Compose 从入门到入门(四)

    本篇开始介绍Jetpack Compose 中常用的组件 有一部分之前的文章中也出现过 xff0c 今天详细说明一下 1 Text 日常最常用的应该就是显示文字 xff0c 所以有必要说一下Text控件 首先源码如下 xff1a span
  • Jetpack Compose 从入门到入门(五)

    应用中的状态是指可以随时间变化的任何值 这是一个非常宽泛的定义 xff0c 从 Room 数据库到类的变量 xff0c 全部涵盖在内 由于Compose是声明式UI xff0c 会根据状态变化来更新UI xff0c 因此状态的处理至关重要
  • Jetpack Compose 从入门到入门(六)

    本篇说说Compose中的Canvas 1 Canvas span class token annotation builtin 64 Composable span span class token keyword fun span sp
  • Jetpack Compose 从入门到入门(七)

    本篇进入Compose 动画部分 1 动画预览 在本系列第一篇中我们提到过 xff0c 64 Preview可以帮我们实现UI的预览功能 xff0c 简单的交互和播放动画 在Android Studio Bumblebee xff08 大黄
  • Android 12 变更及适配攻略

    这几个月有点忙 xff0c 一年一篇的适配文章来的有点晚了 但其实也还好 xff0c 因为我们项目也是下半年才适配 我这边也是提前调研踩坑 xff0c 评估一下工作量 这个时间点也完全跟得上Google Play的审核要求 xff08 11
  • Jetpack Compose 从入门到入门(八)

    接着上一篇的动画部分 xff0c 本篇主要是自定义动画与Animatable AnimationSpec 上一篇中 xff0c 出现了多次animationSpec属性 xff0c 它是用来自定义动画规范的 例如 xff1a span cl
  • Jetpack Compose 从入门到入门(九)

    本篇是Compose的手势部分 点击 添加clickable修饰符就可以轻松实现元素的点击 此外它还提供无障碍功能 xff0c 并在点按时显示水波纹效果 span class token annotation builtin 64 Comp
  • 记参加 2022 Google开发者大会

    前几天有幸参加了2022年Google 开发者大会 Google Developer Summit xff0c 上一次参加Google开发者大会还是2019年 这期间因为众所周知的原因 xff0c 开发者大会都改为了线上举办 和上次相比可以
  • Jetpack Compose 从入门到入门(十)

    本篇介绍如何将Jetpack Compose 添加到已有应用中 xff0c 毕竟大多数情况都是在现有项目中使用 Jetpack Compose 旨在配合既有的基于 View 的界面构造方式一起使用 如果您要构建新应用 xff0c 最好的选择
  • Flutter状态管理之Riverpod 2.0

    两年前分享过一篇Flutter状态管理之Riverpod xff0c 当时riverpod的版本还是0 8 0 xff08 后来文章更新到0 14版本 xff09 当时提到过有一些不足之处 xff1a 毕竟诞生不久 xff0c 它还不能保证
  • Python:元组和字典简述

    目录 1 列表的方法2 for循环遍历列表2 1 语法2 2 range 函数 3 元组3 1 元组的基本概念3 2 元组的创建3 3 元组的解包3 3 1 号在解包中的用法 4 字典4 1 字典的基本概念4 2 字典的使用4 2 1 字典