Python 中常见的数据结构之二推导式

Python 中常见的数据结构之二推导式

使用推异式

推导式是一种从已存在的序列中快速构建列表(list)、集合(set) 和 字典(dictionary)方式。Python 支持 3 种不同类型的推导式:

  • 列表推导式;
  • 字典推导式;
  • 集合推导式。

接下来,我就讲解这四种推导式。

列表推导式

列表推导式包括使用循环和条件语句(如果需要)创建动态列表。下面的几个例子将有助于理解推导式的概念,其中主要展示了怎么使用列表推式。请看例子,新创建的列表中的每个元素,是原来列表中相应表素加 1

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [x + 1 for x in list1]
print(list1)
print(list2)

以上代码的输出结果是:

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

上面的代码中,创建 list2 的代码,等价于下面的代码:

list2 = []
for x in list1:
  list2.append(x + 1)

在下面,这个第二个例子中,我们从原始的列表中创建了一个只包含偶数的新的列表,只需要简单地添加一个条件即可:

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [x for x in list1 if x % 2 == 0]
print(list1)
print(list2

以上代码的输出结果是:

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

可以看到,我们把条件添加到了推导式的结尾处。

字典推导式

字典也可以通过推导式创建。字典推导式和列表推导式类似,是一种从一个字典中创建另一个字典的方案。这种方案允许在原来的字典中选择满足条件的元素,创建新字典。请看下面的代码,我们从 dict1 中选择小于或等于200的元素,将 除以 2,和原来的一起放入新字典中。

dict1 = {'a':100, 'b':200, 'c':300}
dict2 = {x:int(y / 2) for (x, y) in dict1.items() if y <= 200}

print(dict1)
print(dict2)

下面是输出结果:

{'a': 100, 'b': 200, 'c': 300}
{'a': 50, 'b': 100}

上面代码里的字典推导式等价于:

dict2 = {}
for x, y in dict1.items():
   if y <= 200:
       dict2[x] = int(y / 2)

使用推导式,可以显著地减少代码。

集合推导式

集合也可以通过推导式创建。集合推导式的语法,和列表推导式似,只是列现用方括号,集合用花括号,而已。请看下面的代码:

list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 6, 8]
set1= {x + 1 for x in list1 if x % 2 == 0}
print(list1)
print(set1)

上面代码的输出结是:

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

可以看到,重复元素会被删除。

上面的推导式等价于下面的使用循环的代码:

set1 = set()
for x in list1:
  if x % 2 == 0:
    set1.add(x)

<完>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dowhileprogramming

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

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

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

打赏作者

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

抵扣说明:

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

余额充值