Python语言的列表推导式怎么写

简介: Python语言的列表推导式怎么写

本篇主要知识点:
列表推导式可以从一个序列快速构建另一个序列,非常方便快捷,强烈建议使用。

列表推导式适用于简单的for循环,可以对一个列表中的每个元素进行相同操作,也可以挑选出原列表中满足一定条件的元素组成新的列表。

集合推导式应用比较少,而字典推导式却应用广泛,可以从一个dict中选择出满足一定条件的items组成新的dict,也可以对原dict中的key或value进行操作。

列表推导式有极其广泛的应用场景,可以用于循环执行某个函数,也可以用于将某个list转换为dict,或将dict转换为list等。

  1. 列表推导式
    列表推导式是构建列表(list)的一种快捷方式,而且可读性强,用它编写的代码非常有Python味儿,是一种非常推荐的编程风格。

而且,Python的内部实现对列表推导式做了大量优化,可以保证运行速度非常快。

列表推导式可以仅仅使用[]来生成一个list,基本代码格式为:[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件],如下为这两种格式的实现方法:

demo1:

alist=[1,2,3,50,89,26,30]
odd=[i for i in alist if i%2==1] # 选出列表alist中所有的奇数
print(odd) # [1, 3, 89]
Python中的列表推导式主要替换了Java或C语言中的for循环,当你想使用for循环来实现简单的业务时,不妨使用列表推导式。

demo2:

alist=[1,2,3,50,89,26,30]
plus=[i*2+10 for i in alist] # 简单算术操作
print(plus) # [12, 14, 16, 110, 188, 62, 70]
当然,如果是比较复杂的业务,需要多行代码才能实现,那还是老老实实用for循环来实现吧。从这一点来说,列表推导式类似于函数中的lambda表达式,简单的函数可以直接用lambda来表示。

列表推导式还可以实现嵌套,一般为了可读性比较强,最多嵌套3层。

demo3: 列表推导式的嵌套用法

alist=[1,2,5]
blist=['A','B','C']
combined=[b+'_'+str(a) for b in blist for a in alist]
print(combined) # ['A_1', 'A_2', 'A_5', 'B_1', 'B_2', 'B_5', 'C_1', 'C_2', 'C_5']

demo4: 加入判断条件: 只用奇数

combined2=[b+'_'+str(a) for b in blist for a in alist if a%2==1]
print(combined2) # ['A_1', 'A_5', 'B_1', 'B_5', 'C_1', 'C_5']

  1. 其他推导式
    列表推导式并不仅仅适用于列表(list),还适用于其他序列类型,比如set, dict等。所以有的人将生成set的叫做集合推导式,把生成dict的叫做字典推导式。

集合推导式的用法和列表推导式一样,只是将[]改为{}即可,但得到的集合元素之间如果重复,则仅仅保留一个,这是由set的特性:元素不能重复决定的。

集合推导式:

demo1:

alist=[1,2,3,50,89,26,30]
odd={i for i in alist if i%2==1} # 选出列表alist中所有的奇数
print(odd) # {89, 1, 3}
字典推导式的用法和列表推导式一样,只是将[]改为{},但迭代的对象是一个字典类型。

使用字典推导式可以实现很多多样化操作,比如下面将key,value互换。

字典推导式:

demo1: key,value互换;

dictA={'a':10,'b':20,'c':30}
changed={value:key for key,value in dictA.items()}
print(changed) # {10: 'a', 20: 'b', 30: 'c'}
还比如:单独对keys进行迭代,可以选出keys满足一定条件items组成新的dict

demo2: 选出key是奇数的items

dictB={1:'10',2:'20',3:'30',4:'40'}
odd_dict={key:dictB[key] for key in dictB.keys() if key%2==1}
print(odd_dict) # {1: '10', 3: '30'}
同理,也可以单独对values进行迭代,选出values满足一定条件的items组成新的dict.

  1. 应用示例
    列表推导式还有些其他应用场景,比如:

循环执行某个函数:

循环执行某个函数:

import time
def func_test(x):
print('start test: {}'.format(x))
time.sleep(1)
print('end test: {}'.format(x*2)) # 仅仅乘以2
[func_test(x) for x in range(10,15,2)] # 使用列表推导式循环执行某个函数
start test: 10
end test: 20
start test: 12
end test: 24
start test: 14
end test: 28

循环执行函数,并获取返回值:

循环执行某个函数:

import time
def func_test(x):
print('start test: {}'.format(x))
time.sleep(1)
print('end test: {}'.format(x2)) # 仅仅乘以2
return x
2
result=[func_test(x) for x in range(10,15,2)] # 使用列表推导式循环执行某个函数
print(result) # [20, 24, 28]
通过列表推导式和字典推导式的灵活运用,可以将dict类型数据和list数据相互转化,比如:
//代码效果参考:http://www.zidongmutanji.com/bxxx/495436.html

由list生成字典:

blist=['A','B','C']
dict_from_list={b:str(idx+10) for idx,b in enumerate(blist)}
print(dict_from_list) # {'A': '10', 'B': '11', 'C': '12'}

由dict生成list

dictB={1:'10',2:'20',3:'30',4:'40'}
list_fromdict=[key for key, in dictB.items() if key%2==0] # 选出偶数的key
print(list_from_dict) # [2, 4]

相关文章
|
12天前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
59 1
|
15天前
|
开发者 Python
Python列表推导式:优雅与效率的完美融合
Python列表推导式:优雅与效率的完美融合
231 104
|
1月前
|
缓存 监控 数据可视化
微店item_search - 根据关键词取商品列表深度分析及 Python 实现
微店item_search接口可根据关键词搜索商品,返回商品信息、价格、销量等数据,适用于电商检索、竞品分析及市场调研。接口需通过appkey与access_token认证,支持分页与排序功能,Python示例代码实现调用流程,助力商品数据高效获取与分析。
|
15天前
|
Python
Python列表推导式:优雅与效率的艺术
Python列表推导式:优雅与效率的艺术
178 99
|
15天前
|
数据处理 Python
解锁Python列表推导式:优雅与效率的完美融合
解锁Python列表推导式:优雅与效率的完美融合
160 99
|
15天前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
230 95
|
23天前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
311 99
|
1月前
|
程序员 Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
230 99
|
13天前
|
索引 Python
098-python列表_切片_slice_开始_结束
本文介绍了Python中列表的切片(slice)操作,通过“前闭后开”原则截取列表片段,支持正负索引、省略端点等用法,并结合生活实例(如切面包、直播切片)帮助理解。切片不改变原列表,返回新列表。
76 4
|
28天前
|
缓存 算法 数据安全/隐私保护
VVICitem_search - 根据关键词取关键词取商品列表接口深度分析及 Python 实现
VVIC item_search接口支持关键词搜索服装商品,提供价格、销量、供应商等数据,助力市场调研与采购决策。

热门文章

最新文章

  • 1
    Python零基础爬取东方财富网股票行情数据指南
    214
  • 2
    解析Python爬虫中的Cookies和Session管理
    166
  • 3
    Python日志模块配置:从print到logging的优雅升级指南
    123
  • 4
    【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
    92
  • 5
    (Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
    106
  • 6
    (Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
    200
  • 7
    (numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
    75
  • 8
    (numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
    203
  • 9
    (Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
    59
  • 10
    (Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
    94
  • 推荐镜像

    更多