首页 > 编程语言 >Python列表推导式

Python列表推导式

时间:2024-04-15 20:33:19浏览次数:19  
标签:10 推导 Python list 列表 print data

一、列表推导

列表推导式又称推导列表。列表推导式是以列表为载体,以推导的方式将数据生成并放在列表中。推导即规则,它支持for循环和筛选模式(if判断模式)。设定一个既定规则在列表中进行数据生成,列表推导式比传统方法更为简洁,代价是放弃一部分的可读性。

二、如何声明列表推导式

最简单的列表推导式,列表结构作为一个承载体

list_data=[x for x in range(10)]
        #[0,1,2,3,4,5,6,7,8,9]

 每循环一次,向列表添加一个x的值,直到for全部完成。  

三、列表推导式办法与传统方法的比较

推导模式

list_data=[x for x in range(10)]
        #[0,1,2,3,4,5,6,7,8,9]
print(list_data)

 输出结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

传统模式

list_data2=[]
for count in range(10):
    list_data2.append(count)
print(list_data2)

输出结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

带判断的列表推导式

list_data1=[ x for x in range(10) if x%2==0]
print(list_data1)

注意!在列表推导式中没有任何标点符号

for负责数据产生,if负责数据筛选,x负责最终数据输出  

输出结果:

[0, 2, 4, 6, 8]
list_data=[x for x in range(0,20) if x>5]
print(list_data)
输出结果:
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
list_data=[x for x in range(0,20) if x>5 and x<15]
print(list_data)
 输出结果:
[6, 7, 8, 9, 10, 11, 12, 13, 14]
list_data2=[x**2 for x in range(10) if x%2==0]
print(list_data2)
输出结果: [0, 4, 16, 36, 64] 对推导式里的最终输出数据进行二次加工
list_data=[x+10 for x in range(0,20) if x%2==0]
print(list_data)

输出结果:

[10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

List_data=[(x,y) for x in [1,2,3,4,5] if x>3 for y in [6,7,8,9,10]  ]
print(List_data)
输出结果: [(4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10)]

列表推导式的双for循环

list_data1=[(x,y) for x in range(1,4) for y in range(4,7)]
print(list_data1)
list_data2=[(x,y) for x in [1,2,3] for y in [4,5,6]]
print(list_data2)

先看输出的规律:第一个for的第一个元素与第二个for的每个元素进行组合,组合成一个元组

输出:

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

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

等同于以下函数

a=[1,2,3]
b=[4,5,6]
for x in a:
    for y in b:
        list_data.append((x,y))
print(list_data)

 特别注意:

如果返回的是多个值,可以用一个多元数据结构进行返回,如例子中的元组,这样元组可以作为一个元素存在于列表中,推导列表无法一次接受两个元素。  

列表推导式的for循环对两层列表进行循环

#列表推导式
data=[[1,2,3,4,5],[6,7,8,9,10]]
list_data=[y for x in data for y in x]
print(list_data)
#传统写法
emplist=[]
for x in data:
    for y in x:
        emplist.append(y)
print(emplist)

输出结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

在字典中进行推导式

dict_data1={x: x for x in ['name','age','city']}
print(dict_data1)
dict_data2={str(x): x for x in[1,2,3]}
print(dict_data2)

输出结果:

{'name': 'name', 'age': 'age', 'city': 'city'}

{'1': 1, '2': 2, '3': 3}

四、列表推导式的延伸使用

简单的字典推导式构建,注意!字典推导式不再使用方括弧[]

#列表推导式的延伸使用
fields=['姓名','年龄','城市']
info=['zz',28,'上海']
dict_data={x:y for x,y in zip(fields,info)}
print(dict_data)
#传统方法
dict_data={}
for x,y in zip(fields,info):
    dict_data[x]=y

输出结果:{'姓名': 'zz', '年龄': 28, '城市': '上海'}

zip函数,俗称压缩,一对一映射

#zip函数的使用
fields=['姓名','年龄','城市']
info=['zz',28,'上海']
print(zip(fields,info))
print(list(zip(fields,info)))
print(dict(list(zip(fields,info))))
dict_data={x:y for x,y in zip(fields,info)}
print(dict_data)
输出结果:
<zip object at 0x00000275ADE80380>
[('姓名', 'zz'), ('年龄', 28), ('城市', '上海')]
{'姓名': 'zz', '年龄': 28, '城市': '上海'}
#我们先看一下列表的这种操作
my_list1=['5'*10]
#观察这个动作实际上是在操作一个元素,并没有对列表进行操作
print(my_list1)
#这个动作实际上生成了多个列表并进行了合并
my_list2=['5']*10
#这个动作不可以添加逻辑进去,存在局限性
print(my_list2)
#推导列表
my_list=[x for x in range(1000)]
print(my_list)
# 推导列表的效率,要比传统写法高50%左右
my_list=[]
for x in range(10000):
    my_list.append(x)
print(my_list)

  

标签:10,推导,Python,list,列表,print,data
From: https://www.cnblogs.com/longlyseul/p/18136329

相关文章

  • python命令行工具:fire
    fire 是一个由Google开源的Python库,它能自动将Python代码转换成命令行接口(CommandLineInterface,CLI)。fire 库极大地简化了从Python函数或类生成命令行工具的过程。特性易用性:fire 是为了简化命令行工具的创建而设计的,它可以自动从任何Python对象生成命令行接口......
  • python--文件操作指南
    '''1.什么是文件:文件是操作系统给用户/应用程序操作硬盘的一种虚拟的概念/接口用户/应用程序操作系统(文件)计算机硬件(硬盘)2.为何要用文件用户/应用程序可以通过文件将数据永久保存的硬盘中,即操作文件就是操作硬盘用户/应用程序直接操作的是文件,对文件进行的所有的操作......
  • Android修改应用列表的失败学习
    没什么实用价值,一种记叙文和学习笔记的结合体。 0.回老家收到新需求:能不能处理一下这台旧手机,让我在家打上单位的钉钉打卡?旧手机型号华为荣耀7i,安卓版本4.0.3。看到华为两个字,我仿佛看到了我失败的未来。1. 首先想到的必然是虚拟定位。但钉钉显然会防范这种方法。搜索资料......
  • python3 pandas模块import报错 ModuleNotFoundError: No module named '_bz2'
    前言全局说明python3pandas模块import报错ModuleNotFoundError:Nomodulenamed'_bz2'一、环境ubuntu18.04Python3.8.17二、报错内容>>>importpandasTraceback(mostrecentcalllast): File"<stdin>",line1,in<module> F......
  • hash()函数在python2和python3的区别
    在Python3中,对于字符串类型的对象,hash()函数会根据当前进程的种子值计算哈希值。这个种子值在每次Python进程启动时都会随机生成。因此,即使是相同的字符串,在不同的Python进程中调用hash()函数会得到不同的哈希值。这种设计的目的是为了增加哈希表的随机性,从而提高安全性......
  • Mac python 多版本安装、删除、切换
    brewinstallpyenv版本验证pyenv-v 二查看所有的Python版本pyenvversions *指向的是当前所使用的版本,system是系统安装的python三查看所有可以安装的python版本pyenvinstall--list 截图部分四安装指定版本pyenvinstall3.8.9 五......
  • Python对Sql Server数据库增删改查
    Python对SqlServer数据库增删改查#如果电脑上没有安装mssql模块,则要安装mssql模块 安装模块的执行命令为 pip install pymssqlimport pymssql def ExecuteNonQuery(sqlStr,paras):    try:        connect = pymssql.connect(server='192.168.1.23:1......
  • python-函数以及函数的返回值
    '''函数:把具有独立功能的代码块组合成一个个小模块作用:提高代码的效率,实现代码重复---流程标准化#可以在不同的地方多次调用,想要使用几次就使用几次,更加灵活,只需要调用,不需要重新定义'''#def函数名():#函数的定义#函数名需要复合标志符的命名规范(必须是字母,下划线,数......
  • Python中调用C#的dll库
    Python中调用C#的dll库1、创建C#的dll库。dll名称为MyCsharpDLL.dll,下面是dll里面的代码usingSystem;namespaceMyCsharpDLL{publicclassTest{publicvoidPrint(){Console.WriteLine("Helloworld!!!");}......
  • python-深浅复制,可变/不可变对象
    #深复制(拷贝)'''importcopya=[1,2,3,[4,5,6]]#深拷贝a_deepcopy=copy.deepcopy(a)print(id(a))#140399549872448print(id(a_deepcopy))#140399549873280a[2]=100print(a)#[1,2,100,[4,5,6]]print(a_deepcopy)#[1,2,3......