【从零学习python 】 Python中的元组与字典
  LyJBRSvfEdxZ 2023年11月13日 52 0

列表推导式

所谓的列表推导式,就是指的轻量级循环创建列表

  1. 基本的方式

在这里插入图片描述

  1. 在循环的过程中使用if 在这里插入图片描述

  2. 2个for循环 在这里插入图片描述

  3. 3个for循环 在这里插入图片描述

练习

请写出一段 Python 代码实现分组一个 list 里面的元素,比如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....]

参考答案:

a = [x for x in range(1,101)]
b = [a[x:x+3] for x in range(0,len(a),3)]

列表的复制

查看以下代码,说出打印的结果。

a = 12
b = a
b = 13
print(b)
print(a)

输出结果为:

13
12
nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1
nums2[0] = 100
print(nums2)
print(nums1)

输出结果为:

[100, 5, 8, 9, 10, 12]
[100, 5, 8, 9, 10, 12]

思考:

为什么修改了 nums2里的数据,nums1的数据也会改变?

Python中的赋值运算都是引用(即内存地址)的传递。对于可变类型来说,修改原数据的值,会改变赋值对象的值。

怎样nums1和nums2变成两个相互独立不受影响的列表?

使用列表的 copy 方法,或者 copy 模块就可以赋值一个列表。

列表的copy方法

使用列表的copy方法,可以直接将原来的列表进行复制,变成一个新的列表,这种复制方式是浅复制。

nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1.copy()  # 调用列表的copy方法,可以复制出一个新的列表

nums2[0] = 100

# 修改新列表里的数据,不会影响到原有列表里的数据
print(nums2)
print(nums1)

copy模块的使用

除了使用列表的copy方法以外,Python还提供了copy模块来复制一个对象。copy模块提供了浅复制和深复制两种方式,它们的使用方式相同,但是执行的效果有一定的差异。

浅拷贝

浅拷贝是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝内容。

import copy

words1 = ['hello', 'good', ['yes', 'ok'], 'bad']

# 浅拷贝只会拷贝最外层的对象,里面的数据不会拷贝,而是直接指向
words2 = copy.copy(words1)

words2[0] = '你好'
words2[2][0] = 'no'

print(words1)  # ['hello', 'good', ['no', 'ok'], 'bad']
# wrods2 里的 yes 被修改成了 no
print(words2)  # ['你好', 'good', ['no', 'ok'], 'bad']
深拷贝

深拷贝是对于一个对象所有层次的递归拷贝。

import copy

words1 = ['hello', 'good', ['yes', 'ok'], 'bad']

# 深拷贝会将对象里的所有数据都进行拷贝
words2 = copy.deepcopy(words1)

words2[0] = '你好'
words2[2][0] = 'no'

print(words1)  # ['hello', 'good', ['yes', 'ok'], 'bad']
print(words2)  # ['你好', 'good', ['no', 'ok'], 'bad']

切片

列表和字符串一样,也支持切片,切片其实就是一种浅拷贝。

words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
words2 = words1[:]
words2[0] = '你好'
words2[2][0] = 'no'
print(words1)  # ['hello', 'good', ['no', 'ok'], 'bad']
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']

元组

Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。

aTuple = ('et',77,99.9)
aTuple

一、访问元组

在这里插入图片描述

二、修改元组

在这里插入图片描述

说明: python中不允许修改元组的数据,包括不能删除其中的元素。

三、count, index

index和count与字符串和列表中的用法相同

a = ('a', 'b', 'c', 'a', 'b')
a.index('a', 1, 3) # 注意是左闭右开区间
a.index('a', 1, 4)
a.count('b')
a.count('d')

四、定义只有一个数据的元组

定义只有一个元素的元组,需要在唯一的元素后写一个逗号

a = (11)
type(a)
a = (11,)  # 只有一个元素的元组,必须要在元素后写一个逗号
type(a)

五、交换两个变量的值

第1种方式,使用中间变量

a = 4
b = 5
c = 0

c = a
a = b
b = c
print(a)
print(b)

第2种方式,直接交换。

a, b = 4, 5
a, b = b, a

print(a)
print(b)

字典介绍

一、列表的缺点

当存储的数据要动态添加、删除的时候,我们一般使用列表,但是列表有时会遇到一些麻烦。

nameList = ['xiaoZhang', '男', '木匠'];

nameList[2] = '铁匠'  

nameList = ['xiaoWang', 18, '男',  '铁匠']

nameList[3] = 'xiaoxiaoWang'

有没有方法,既能存储多个数据,还能在访问元素的很方便就能够定位到需要的那个元素呢?

答:

字典

二、字典的使用

定义字典的格式:{键1:值1, 键2:值2, 键3:值3, ..., 键n:值n}

变量info为字典类型:

info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国上海'}
info['name']

说明:

  • 字典和列表一样,也能够存储多个数据
  • 列表中找某个元素时,是根据下标进行的;字典中找某个元素时,是根据'名字'(就是冒号:前面的那个值,例如上面代码中的'name'、'id'、'sex')
  • 字典的每个元素由2部分组成,键:值。例如 'name':'班长' ,'name'为键,'班长'为值
  • 键可以使用数字、布尔值、元组等不可变数据类型,但是一般习惯使用字符串
  • 每个字典里的key都是唯一的,如果出现了多个key,后面的value会覆盖前一个key对应的value.
  • 在习惯上:
    • 列表更适合保存多个商品、多个姓名、多个时间,这样的相似数据;
    • 字典更适合保存一个商品的不同信息、一个人的不同信息,这样的不同数据。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  2Fnpj8K6xSCR   2024年05月17日   80   0   0 Python
  xKQN3Agd2ZMK   2024年05月17日   65   0   0 Python
  Ugrw6b9GgRUv   2024年05月17日   38   0   0 Python
LyJBRSvfEdxZ