Learn_Python_列表、集合和字典生成式11

一.列表生成式

1.如果想要生成列表[1,4,9,16,25,36],可以使用for-in循环:
L = []
for i in range(1,7):
    L.append(i * i)
print(L)
[1, 4, 9, 16, 25, 36]

上述的解决方案有更好的替代,那就是使用列表生成式。

列表生成式的语法格式:[表示列表元素的表达式 for 自定义的变量 in 可迭代对象].

其中,“表示列表元素的表达式”中通常包含“自定义的变量”

列表生成式的使用场景:凡是可以通过for-in循环创建的列表,都可以使用列表生成式来创建。

L = [i * i for i in range(1,7)]
print(L)
from IPython.display import Image
Image(filename = 'F:/Jupyter/Python/shengchengshi.jpg', width=300, height=150)
[1, 4, 9, 16, 25, 36]
2.在列表生成式中使用if语句

可以在列表生成式的for-in循环添加if语句

L = [i * i for i in range(1,7) if not i % 2]
print(L)
[4, 16, 36]
# 以上代码相当于:
L = []
for i in range(1,7):
    if not i % 2:
        L.append(i * i)
print(L)
[4, 16, 36]
3.在列表生成式中可以使用双重循环
L = [(i,j) for i in range(1,4) for j in range(1,4)]
print(L)
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
# 以上代码相当于:
L = []
for i in range(1,4):
    for j in range(1,4):
        L.append((i,j))
print(L)
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
# 既使用双重循环,又使用if语句
L = [(i,j) for i in range(1,4) for j in range(1,4) if i != j]
print(L)
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
4.列表生成式支持嵌套

可以在一个列表生成式中嵌套另一个列表生成式

matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
L = [[row[i] for row in matrix] for i in range(4)]
print(L)
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
# 以上代码相当于:
L = []
for i in range(4):
    L.append([row[i] for row in matrix])
print(L)
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
# 以上也代码相当于:
L = []
for i in range(4):
    l_row = []
    for row in matrix:
        l_row.append(row[i])
    L.append(l_row)
print(L)
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

二.集合生成式

1.如果想要生成集合{1,4,9,16,25,36},可以使用for-in循环:
s = set()
for i in range(1,7):
    s.add(i * i)
print(s)
{1, 4, 36, 9, 16, 25}

上述的解决方案有更好的替代,那就是使用集合生成式。

集合生成式的语法格式:[表示集合元素的表达式 for 自定义的变量 in 可迭代对象].

其中,“表示集合元素的表达式”中通常包含“自定义的变量”

集合生成式的使用场景:凡是可以通过for-in循环创建的列表,都可以使用集合生成式来创建。

s = {i * i for i in range(1,7)}
print(s)
{1, 4, 36, 9, 16, 25}
2.在集合生成式中使用if语句

可以在集合生成式的for-in循环添加if语句

s = {i * i for i in range(1,7) if not i % 2}
print(s)
{16, 4, 36}
# 以上代码相当于:
s = set()
for i in range(1,7):
    if not i % 2:
        s.add(i * i)
print(s)
{16, 4, 36}
3.在集合生成式中可以使用双重循环
s = {(i,j) for i in range(1,4) for j in range(1,4)}
print(s)
{(1, 2), (3, 2), (1, 3), (3, 3), (3, 1), (2, 1), (2, 3), (2, 2), (1, 1)}
# 以上代码相当于:
s = set()
for i in range(1,4):
    for j in range(1,4):
        s.add((i,j))
print(s)
{(1, 2), (3, 2), (1, 3), (3, 3), (3, 1), (2, 1), (2, 3), (2, 2), (1, 1)}
# 既使用双重循环,又使用if语句
s = {(i,j) for i in range(1,4) for j in range(1,4) if i != j}
print(s)
{(1, 2), (3, 2), (1, 3), (3, 1), (2, 1), (2, 3)}
4.集合生成式支持嵌套

可以在一个集合生成式中嵌套另一个集合生成式

自己举例

三.字典生成式

1.什么是字典生成式
items = ['Fruits','Book','Others']
prices = [96,78,83]

如果想要生成字典{‘FRUITS’:96,‘BOOKS’:78,‘OTHERS’:83},可以使用for-in循环:

d = {}
for item,price in zip(items,prices):
    d[item.upper()] = price
print(d)
{'FRUITS': 96, 'BOOK': 78, 'OTHERS': 83}

上述的解决方案有更好的替代,那就是使用字典生成式。

字典生成式的语法格式:

{表示字典key的表达式:表示字典value的表达式

for 自定义的表示key的变量,自定义的表示value的变量 in 可迭代对象}。

其中,“表示字典key的表达式”中通常包含“自定义的表示key的变量”,“表示字典value的表达式”中通常包含“自定义的表示value的变量”

字典生成式的使用场景:凡是可以通过for-in循环创建的字典,都可以使用字典生成式来创建。

d = {item.upper(): price for item,price in zip(items,prices)}
print(d)
from IPython.display import Image
Image(filename = 'F:/Jupyter/Python/shengchengshi1.jpg', width=400, height=200)
{'FRUITS': 96, 'BOOK': 78, 'OTHERS': 83}
2.在字典生成式中使用if语句

可以在字典生成式的for-in循环添加if语句

d = {item.upper(): price
     for item,price in zip(items,prices)
    if price > 80}
print(d)
{'FRUITS': 96, 'OTHERS': 83}
3.在字典生成式中也可以使用双重for-in循环
d = {i:j for i in range(1,4) for j in range(1,4)}
print(d)
{1: 3, 2: 3, 3: 3}
# 以上代码相当于
d = {}
for i in range(1,4):
    for j in range(1,4):
        d[i] = j
print(d)
{1: 3, 2: 3, 3: 3}
#  既可以使用双重for-in循环,也可以使用if语句
d = {i:j for i in range(1,4) for j in range(1,4) if i != j}
print(d)
{1: 3, 2: 3, 3: 2}

学习参考:

  1. 图解Python: http://e-learning.51cto.com/course/12803
  2. Python菜鸟教程:https://www.runoob.com/python/python-tutorial.html
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZPILOTE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值