你真的会列表

  • 数据类型详解-列表
    • 列表的定义
    • 列表的基本操作
    • 列表中切片
    • 列表相关函数
    • 深拷贝与浅拷贝
      • 浅拷贝
      • 深拷贝
    • 列表推导式
      • 一,基本的列表推导式使用方式
      • 二,带有判断条件的列表推到式
      • 三,对于嵌套循环的列表推到式
      • 练习

数据类型详解-列表

列表就是一组有序的数据组合,列表中的数据可以被修改

列表的定义

  • 可以使用 中括号进行定义 []
  • 也可以使用 list函数 定义
  • 在定义列表中的元素时,需要在每个元素之间使用逗号,进行分隔。[1,2,3,4]
  • 列表中的元素可以是任意类型的,通常用于存放同类项目的集合

列表的基本操作

  • 列表定义 [ ] , list()
  • 列表相加: 即拼接
  • 列表相乘: 即重复
  • 列表的下标: 实现获取,更新
  • 列表元素的添加:列表名.append()
  • 列表元素的删除
    • del 列表[下标]
    • pop()函数 删除(默认最后一个)并返回被删元素

列表中切片

列表[开始索引:结束索引:步进值]

  1. 列表[开始索引:] ==> 从开始索引到列表的最后
  2. 列表[:结束值] ==> 从开始到指定的结束索引之前
  3. 列表[开始索引:结束索引] ==> 从开始索引到指定结束索引之前
  4. 列表[开始索引:结束索引:步进值] ==> 从指定索引开始到指定索引前结束,按照指定步进进行取值切片
  5. 列表[:] 或 列表[::] ==> 所有列表元素的切片
  6. 列表[::-1] ==> 倒着获取列表的元素

示例:

varlist = ['刘德华','张学友','张国荣','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']# 从开始索引到列表的最后
res = varlist[2:] # ['张国荣','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']
# 从开始到指定的结束索引之前
res = varlist[:2] # ['刘德华','张学友']
# 从开始索引到指定结束索引之前
res = varlist[2:6] # ['张国荣', '黎明', '郭富城', '小沈阳']
# 从指定索引开始到指定索引前结束,按照指定步进进行取值切片
res = varlist[2:6:2] # ['张国荣', '郭富城']
# 所有列表元素的切片
res = varlist[:]
res = varlist[::]
# 倒着输出列表的元素
res = varlist[::-1]# 使用切片方法 对列表数据进行更新和删除
print(varlist)# 从指定下标开始,到指定下标前结束,并替换为对应的数据(容器类型数据,会拆分成每个元素进行赋值)
# varlist[2:6] = ['a','b','c',1,2,3]
# varlist[2:6:2] = ['a','b'] # 需要与要更新的元素个数对应# 切片删除
# del varlist[2:6]
del varlist[2:6:2]

列表相关函数

varlist = ['刘德华','张学友','张国荣','张学友','黎明','郭富城','小沈阳','刘能','宋小宝','赵四']# len()  检测当前列表的长度,列表中元素的个数
res = len(varlist)# count() 检测当前列表中指定元素出现的次数
res = varlist.count('张学友')# append() 向列表的尾部追加新的元素,返回值为 None
varlist.append('川哥')# insert() 可以向列表中指定的索引位置添加新的元素,
varlist.insert(20,'aa')# pop() 可以对指定索引位置上的元素做 出栈 操作,返回出栈的元素
res = varlist.pop() # 默认会把列表中的最后一个元素 出栈
res = varlist.pop(2) # 会在列表中把指定索引的元素进行 出栈varlist = [1,2,3,4,11,22,33,44,1,2,3,4]
# remove() 可以指定列表中的元素 进行 删除,只删除第一个。如果没有找到,则报错
res = varlist.remove(1)# index() 可以查找指定元素在列表中第一次出现的索引位置
# res = varlist.index(1)
# res = varlist.index(1,5,20) # 可以在指定索引范围内查找元素的索引位置# extend() 接收一个容器类型的数据,把容器中的元素追加到原列表中
# varlist.extend('123')# s.clear() # 清空列表内容
# varlist.clear()# reverse() 列表翻转
varlist.reverse()# sort() 对列表进行排序
res = varlist.sort() # 默认对元素进行从小到大的排序
res = varlist.sort(reverse=True) # 对元素进行从大到小的排序
res = varlist.sort(key=abs) # 可以传递一个函数,按照函数的处理结果进行排序

深拷贝与浅拷贝

浅拷贝

使用copy函数后,新列表中的多维列表或容器与原列表使用同一地址。即改变一处,则新旧列表中均改变

# 浅拷贝 只能拷贝当前列表,不能拷贝列表中的多维列表元素varlist = [1,2,3]
# 简单的拷贝 就可以把列表复制一份
newlist = varlist.copy()
# 对新拷贝的列表进行操作,也是独立的
del newlist[1]
# print(varlist,id(varlist))
# print(newlist,id(newlist))
'''
[1, 2, 3] 4332224992
[1, 3] 4332227552
'''# 多维列表
varlist = [1,2,3,['a','b','c']]# 使用copy函数 拷贝一个多维列表
newlist = varlist.copy()'''
print(newlist,id(newlist))
print(varlist,id(varlist))
[1, 2, 3, ['a', 'b', 'c']] 4361085408
[1, 2, 3, ['a', 'b', 'c']] 4361898496
'''
# 如果是一个被拷贝的列表,对它的多维列表元素进行操作时,会导致原列表中的多维列表也发生了变化
del newlist[3][1]'''
通过id检测,发现列表中的多维列表是同一个元素(对象)
print(newlist[3],id(newlist[3]))
print(varlist[3],id(varlist[3]))
['a', 'c'] 4325397360
['a', 'c'] 4325397360
'''

深拷贝

解决浅拷贝的问题,均使用新地址

使用copy模块中的 deepcopy 函数可以完成深拷贝

# 深拷贝 就是不光拷贝了当前的列表,同时把列表中的多维元素也拷贝了一份
import copyvarlist = [1,2,3,['a','b','c']]# 使用 copy模块中 深拷贝方法 deepcopy
newlist = copy.deepcopy(varlist)
del newlist[3][1]print(varlist)
print(newlist)'''print(newlist[3],id(newlist[3]))print(varlist[3],id(varlist[3]))['a', 'c'] 4483351248['a', 'b', 'c'] 4483003568
'''

列表推导式

List-Comprehensions

列表推导式提供了一个更简单的创建列表的方法。

常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。

采用一种表达式的当时,对数据进行过滤或处理,并且把结果组成一个新的列表

一,基本的列表推导式使用方式

结果变量 = [变量或变量的处理结果 for 变量 in 容器类型数据]

示例:

# 1 假设我们想创建一个平方列表# 使用普通方法完成
varlist = []
for i in range(10):varlist.append(i**2)
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 使用 map函数和list完成
varlist = list(map(lambda x: x**2, range(10)))
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 使用列表推到式完成 下面这个列表推到式和第一种方式是一样的
varlist = [i**2 for i in range(10)]
# print(varlist)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 2。 '1234' ==> [2,4,6,8]
# 常规方法完成需求
varstr = '1234'
newlist = []
for i in varstr:newlist.append(int(i)*2)
# print(newlist)  # [2, 4, 6, 8]# 使用列表推到式完成上面的需求
newlist = [int(i)*2 for i in varstr]
# print(newlist)  # [2, 4, 6, 8]# 使用列表推到式+位运算完成
newlist = [int(i) << 1 for i in varstr]
# print(newlist)  # [2, 4, 6, 8]

二,带有判断条件的列表推到式

结果变量 = [变量或变量的处理结果 for i in 容器类型数据 条件表达式]

示例:

# 0-9 求所有的偶数,==> [0, 2, 4, 6, 8]
# 常规方法完成
newlist = []
for i in range(10):if i % 2 == 0:newlist.append(i)
# print(newlist) # [0, 2, 4, 6, 8]# 列表推到式完成
newlist = [i for i in range(10) if i % 2 == 0]
# print(newlist)  # [0, 2, 4, 6, 8]

三,对于嵌套循环的列表推到式

'''
# 下面这个 3x4的矩阵,它由3个长度为4的列表组成,交换其行和列
[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],
]==>
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]
]
'''
arr = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],
]# 常规方法完成
# newlist = []
# for i in range(4):
#     res = []
#     for row in arr:
#         res.append(row[i])
#     newlist.append(res)
# print(newlist)# 使用列表推到式完成
newlist = [[row[i] for row in arr] for i in range(4)]
print(newlist)

练习

#行转列,列转行
arr = [[1,2,3,4],[5,6,7,8],[9,8,10,11,12],
]
newlist = [[row[i] for row in arr] for i in range(4)]
#使用列表推导式完成九九乘法表list = [[f'{x}×{y}={x*y}' for y in range(1,x+1)] for x in range(1,10)]print(list)
# 字典转化为列表vardic = {'user':'admin','age':20,'phone':'123'}varlist=[f'{i}={vardic[i]}' for i in vardic]print(varlist)
# 把列表中的所有字符全部转为小写varlist = ['AAAAqA','bbbiubisAAAA','ccccccAAAAWQQE']newlist=[i.lower() for i in varlist]print(newlist)
# x是0-5之间的偶数,y是0-5之间的奇数,把x,y组成元组放在列表中varlist = [(i,j) for j in range(5) if j % 2!= 0 for i in range(5) if i % 2 ==0]print(varlist)
# 倒序实现九九乘法表varlist = [[f'{i}×{j} = {i*j}' for j in range(1,i)] for i in range(9,0,-1)]

好好学python · 你真的会列表吗(列表推导式质检员)相关推荐

  1. python入门基础篇(三)序列切片,列表、元组推导式

    前面介绍了列表与元组,在这里补充一下关于列表.元组推导式,以及序列的切片.切片不仅仅用于列表元组,还可以用于字符串等等 文章目录 一.序列切片 二.列表推导式 1.根据列表生成指定需求的列表 2.生成 ...

  2. 高阶函数、列表/集合/字典/推导式、递归函数

    文章目录 高阶函数(map filter reduce sorted) map(处理数据) filter(过滤数据) reduce(计算数据) reduce(func,lst)实现的过程 sorted ...

  3. (MAX第八篇)Python列表迭代及推导式(初级)

    目录 1. 迭代 for 循环 1.1 遍历`range()` 1.2 遍历列表 1.3 遍历字符串 2. 列表推导式 我们很多时候需要遍历整个列表,也就是说要使用列表中的每一个元素,则可以使用迭代f ...

  4. python列表切片和推导式思维导图_Python列表推导式使用

    列表推导式 列表推导式用来快速产生一个列表,主要有三种结构:基本结构,条件结构和多重循环(条件)结构 基本结构 语法: 列表 = [表达式 for 变量 in 序列 ] 含义: 变量每在序列中取一次值 ...

  5. Python外壳:代码结构!(推导式和函数 )

    推导式: 推导式是一个或者多个迭代器快速简洁的创建数据结构的一种方法. 它可以将循环和条件判断结合,从而避免语法冗长的代码. 悄悄告诉你,会使用推导式.很大程度上说明,你已经超过许多初学者啦· 也就是 ...

  6. 14 Python之生成器,生成器函数以及推导式

    一.生成器 本质就是迭代器. 我们可以直接执⾏__next__()来执⾏ 以下⽣成器 一个一个的创建对象 创建生成器的方式: 1.生成器函数 2.通过生成器 表达式来获取生成器 3.类型转换(看不到) ...

  7. PythonStudy——列表与字典推导式 List and dictionary derivation

    # 快速生成列表或字典的语法糖,且能在生成过程中添加简单的逻辑 # 能被列表推导式推导的数据源必须在循环取值时可以得到一个值 ls = [v for v in range(1, 6)] print(l ...

  8. 字典推导式_聊一聊:python的各种推导式(列表推导式、字典推导式、集合推导式)...

    作者:苍松 原文:https://www.cnblogs.com/tkqasn/p/5977653.html 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可 ...

  9. python numpy 奇数偶数行互换_python 列表推导式(经典代码)(21)

    文章首发微信公众号,微信搜索:猿说python 截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率 ...

最新文章

  1. Apache Dubbo 2.7.7 发布!升级 fastjson 等依赖!
  2. SVG animation 回顾
  3. 酷!GitHub开发者自研火星车,开发教程全面开源
  4. 没有回家的等于没过年
  5. 首先请与所有现有链接到该网络共享的映射断开连接_疫情之下:该如何使用Python预测员工流失,老板直呼内行!...
  6. 计算机骗局案例,骗局揭秘 | 卖你一台假电脑,再送你一个假鲁大师
  7. hdu 2011 多项式求和 解题报告
  8. P3368 【模板】树状数组 2
  9. 莫烦python讲得好差_莫烦PYTHON——PyTorch——DQN 代码详解
  10. PSP-DDR跳舞机模拟器制谱教程
  11. 改进后的第二版Retropie树莓派掌机(二)
  12. Android混淆文件配置
  13. PreparedStatement enum
  14. 深入理解Binder机制1-AIDL原理
  15. 2003年28家上海最受欢迎的餐馆
  16. vant-list上拉加载onload事件触发多次
  17. Centos 8 安装 Openbravo 之安装 httpd mod_jk
  18. 学习正则有感by魔芋(命名问题)
  19. 北京大学生数学建模与计算机应用,2011年北京市大学生数学建模与计算机应用竞赛获奖名单...
  20. Linux系统编程之捕捉SIGCHLD

热门文章

  1. jQuery常用方法(二)-事件
  2. Silverlight学习笔记之页面跳转
  3. JavaScript存在的原因
  4. UA PHYS515A 电磁理论V 电磁波与辐射6 波导
  5. VC++绘制铁路道岔
  6. Linux内核进程管理基本概念-进程、运行队列、等待队列、进程切换、进程调度
  7. 理解Promise (3)
  8. 为什么浮点型运算结果会有误差?
  9. JDK提供的原子类原理与使用
  10. POJ 3616 Milking Time