【python】python推导式——列表/元组/字典/集合 推导式

文章参考:

100天精通Python(基础篇)——第25天:推导式大全_无 羡ღ的博客-CSDN博客

Python 推导式 | 菜鸟教程 (runoob.com)

目录

一, 推导式简单介绍

二,列表推导式

三, 元组推导式

四, 字典推导式

五, 集合推导式

六, 推导式的其它格式


一, 推导式简单介绍

python推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。

python支持的推导式如下:

  • 列表推导式list
  • 元组推导式tuple
  • 字典推导式dict
  • 集合推导式set

二,列表推导式

python列表推导式,又称列表解析式。可以用一种简明扼要的方法来创建列表。

列表推导式的格式:

[表达式 for 变量 in iterable(可迭代对象)]
[out_exp_res for out_exp in input_list]

[表达式 for 变量 in iterable(可迭代对象) if 条件]
[out_exp_res for out_exp in input_list if condition]

格式说明:

  • 表达式/out_exp_res:列表生成元素表达式,可以是有返回值的函数;
  • for 变量 in iterable/for out_exp in input_list:可迭代input_list 将out_exp传入到out_exp_res表达式中;iterable/inputlist包括 序列、字符串、元组、列表等;
  • if 条件/if condition:条件语句,可以过滤列表中不符合条件的值;

列表推导式运行结束后会返回一个新列表。

使用示例1:过滤掉长度小于或等于3的字符串列表,并将得到的字符串转换为大写字母:

names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
new_list = [name.upper() for name in names if len(name)>3]
print(new_list)  # 输出结果 ['ALICE', 'JERRY', 'WENDY', 'SMITH']

使用示例2:从输入的字符串中过滤掉小于或等于3的字符串列表,将得到的字符串转换成小写字母,输入的多个字符串之间用空格隔开

new_list = [name.lower() for name in input().split() if len(name)>3]  # 输入  TOM JACK JERRY MARY ALICE WENDY
print(new_list)  # 输出  ['jack', 'jerry', 'mary', 'alice', 'wendy']

使用示例3:计算30以内可以被3整除的整数,对得到的数据取平方值

new_list = [x*x for x in range(31) if x%3==0]
print(new_list)  # 输出 [0, 9, 36, 81, 144, 225, 324, 441, 576, 729, 900]

使用示例4:从嵌套列表中去除偶数

list1 = [[1,2,3],[4,5,6],[7,8,9]]
new_list = [x for y in list1 for x in y if x%2==0]
print(new_list)  # 输出 [2, 4, 6, 8]

使用示例5:双遍历字符并相加

new_list = [x+y for x in 'python' for y in '12']
print(new_list)  # 输出 ['p1', 'p2', 'y1', 'y2', 't1', 't2', 'h1', 'h2', 'o1', 'o2', 'n1', 'n2']

三, 元组推导式

元组推导式可以利用range区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。

元组推导式的格式和列表类似,不同在于列表使用方括号 [] ,元组使用圆括号 (),且元组推导式返回的是生成器对象,需要使用内置函数tuple()转换成元组。元组推导式的格式:

(表达式 for 变量 in iterable(可迭代对象))
(out_exp_res for out_exp in input_list)

(表达式 for 变量 in iterable(可迭代对象) if 条件)
(out_exp_res for out_exp in input_list if condition)

示例1:不使用tuple()转换,输出的是生成器对象

new_tuple = (x for x in range(31) if x%2==0)
print(new_tuple)  #输出 <generator object <genexpr> at 0x000001A8738FACF0>

示例2:使用tuple()转换为元组

new_tuple = (x for x in range(31) if x%2==0)
print(tuple(new_tuple))  # 输出 (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30)

四, 字典推导式

字典推导式的格式与列表推导式格式类似,不同在于字典推导式使用大括号 {},且以键值对的格式输出,列表推导式使用方括号 [];字典推导式的返回值是字典。

字典推导式的格式:

{key:value for value in iterable(可迭代对象)}

{key:value for value in iterable(可迭代对象) if 条件}

使用示例1:以10以内的偶数为键,数字的平方为值

new_dict = {x:x*x for x in range(11) if x%2==0}
print(new_dict) # 输出 {0: 0, 2: 4, 4: 16, 6: 36, 8: 64, 10: 100}

使用示例2: 以输入的字符串为键,以输入的字符串的长度为值

new_dict = {s:len(s) for s in input().split()}  # 输入 TOM JACK JERRY MARY ALICE WENDY
print(new_dict)  # 输出 {'TOM': 3, 'JACK': 4, 'JERRY': 5, 'MARY': 4, 'ALICE': 5, 'WENDY': 5}

五, 集合推导式

集合是无序,不重复的,所以集合推导式得到的新序列也是无序,不重复的。集合推导式的格式和列表类似,区别在于集合使用大括号 {},列表使用方括号 []。

集合推导式的格式:

{表达式 for 变量 in iterable(可迭代对象)}
{out_exp_res for out_exp in input_list}

{表达式 for 变量 in iterable(可迭代对象) if 条件}
{out_exp_res for out_exp in input_list if condition}

使用示例1:把字符串中的重复的字母去除

new_set = {x for x in 'aaasdfghfdsfg123323'}
print(new_set)  # 输出 {'s', '2', 'd', 'f', 'h', 'a', '1', 'g', '3'}

使用示例2:判断不是'abc'的字母并输出

new_set = {x for x in 'abcdsfabdcad' if x not in 'abc'}
print(new_set)  # 输出 {'f', 'd', 's'}

六, 推导式的其它格式

  python推导式还有如下格式:

result1 if condition else result2 for value in iterable

示例:查找给定的列表中,如果字符串是以字母p开头,转换为title()格式输出,否则转换为大写字母输出

l = ['Python','ipython2','python3']

# 列表推导式
new_list = [word.title() if word.startswith('p') else word.upper() for word in l]
print(new_list)

# 元组推导式
new_tuple = (word.title() if word.startswith('p') else word.upper() for word in l)
print(tuple(new_tuple))  # 输出 ('PYTHON', 'IPYTHON2', 'Python3')

# 集合推导式
new_set = {word.title() if word.startswith('p') else word.upper() for word in l}
print(new_set)  # 输出 {'IPYTHON2', 'Python3', 'PYTHON'}

# 字典推导式
new_dict = {word:word.title() if word.startswith('p') else word.upper() for word in l}
print(new_dict)  # 输出 {'Python': 'PYTHON', 'ipython2': 'IPYTHON2', 'python3': 'Python3'}

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值