54.Python 推导式创建序列

目录

推导式创建序列

列表推导式

字典推导式

集合推导式

生成器推导式 ( 生成元组 )


推导式创建序列

推导式是从一个或者多个迭代器快速创建序列的一种方法; 它可以将循环和条件判断结合, 从而避免冗长的代码;

推导式是典型的Python风格, 会使用它代表你已经超过Python小学生的水平;

列表推导式

列表推导式生成列表对象, 语法如下:

[表达式  for  item  in  可迭代对象]

或者

{表达式  for  item  in  可迭代对象  if  条件判断}
a = [x for x in range(1,5)]
print(a)
a = [x*2 for x in range(1,5)]
print(a)
a = [x*2 for x in range(1,20) if x%5==0] #条件过滤,取能被5整取的数
print(a)
a = [a for a in 'abcdefghijklmn']
print(a)
cells = [(row,col) for row in range(1,3) for col in range(3,8)] #可以使用两个循环
print(cells)

输出:

D:\wwwroot\pyiteam\venv\Scripts\python.exe D:/wwwroot/pyiteam/mypy01.py
[1, 2, 3, 4]
[2, 4, 6, 8]
[10, 20, 30]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']
[(1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7)]

Process finished with exit code 0

字典推导式

字典推导式生成字典对象, 格式如下:

{key_expression : value_expression  for  表达式  in  可迭代对象}

类似于列表推导式, 字典推导也可以增加if条件判断,多个for循环;

#统计文本中字符出现的次数:
my_txt = 'i love you, i love math, i love marry'
char_count = {c:my_txt.count(c) for c in my_txt}
print(char_count)

char_count1 = {c:my_txt.count(c) for c in my_txt if c.strip()!=''} #条件过滤键为空
print(char_count1)

输出:

D:\wwwroot\pyiteam\venv\Scripts\python.exe D:/wwwroot/pyiteam/mypy01.py
{'i': 3, ' ': 8, 'l': 3, 'o': 4, 'v': 3, 'e': 3, 'y': 2, 'u': 1, ',': 2, 'm': 2, 'a': 2, 't': 1, 'h': 1, 'r': 2}
{'i': 3, 'l': 3, 'o': 4, 'v': 3, 'e': 3, 'y': 2, 'u': 1, ',': 2, 'm': 2, 'a': 2, 't': 1, 'h': 1, 'r': 2}

Process finished with exit code 0

集合推导式

集合推导式生成集合, 和列表推导式的语法格式类似:

 { 表达式  for  item  in  可迭代对象 }

 或者

 { 表达式  for  tiem  in  可迭代对象  if  条件判断 }

# 集合推导式
a = { x for x in range(1,100) if x%9==0 }
print(a)

输出:

D:\wwwroot\pyiteam\venv\Scripts\python.exe D:/wwwroot/pyiteam/mypy01.py
{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}

 

生成器推导式 ( 生成元组 )

很多人会问, 都有推导式, 元组有没有, 能不能用小括号呢?

我们发现提示的是’一个生成器对象’;显然,元组是没有推导式的;

a = (x for x in range(1,100) if x%9==0)
print(a)

D:\wwwroot\pyiteam\venv\Scripts\python.exe D:/wwwroot/pyiteam/mypy01.py
<generator object <genexpr> at 0x015C8878>

一个生成器只能运行一次, 第一次迭代可以得到数据, 第二次迭代发现数据已经没有了;

gnt = (x for x in range(1,100) if x%9==0)
#print(tuple(gnt))
for x in gnt:#gnt是生成器对象,生成器是可迭代的对象
    print(x,end=',') #第一次遍历有数据
print()
for x in gnt:
    print(x,end='...')  #第二次遍历就没有数据了
print(tuple(gnt))

.........................................................................................


D:\wwwroot\pyiteam\venv\Scripts\python.exe D:/wwwroot/pyiteam/mypy01.py
9,18,27,36,45,54,63,72,81,90,99,
()

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值