Python 推导式

创建列表

num_list1 = [i for i in range(10)]
print(num_list1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
num_list2 = [[i, i+1] for i in range(10)]
print(num_list2) # [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9], [9, 10]] 
num_list3 = [ [i,i] for i in range(10) if i > 6]
print(num_list3) # [[7, 7], [8, 8], [9, 9]]
num_list4 = [ 'test-{}'.format(i) for i in range(10) if i > 6]
print(num_list4) # ['test-7', 'test-8', 'test-9']

创建集合

num_set1 = {i for i in range(10)}
print(num_set1) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

创建字典

num_dict1 = {i:'test-{}'.format(i) for i in range(10)}
print(num_dict1) # {0: 'test-0', 1: 'test-1', 2: 'test-2', 3: 'test-3', 4: 'test-4', 5: 'test-5', 6: 'test-6', 7: 'test-7', 8: 'test-8', 9: 'test-9'}
num_dict2 = {i:(10, i) for i in range(10)}
print(num_dict2) # {0: (10, 0), 1: (10, 1), 2: (10, 2), 3: (10, 3), 4: (10, 4), 5: (10, 5), 6: (10, 6), 7: (10, 7), 8: (10, 8), 9: (10, 9)}

创建元组

与创建其他类型的数据不同,不会立即创建元组数据,而是会返回一个生成器。

num_tuple1 = ((i, i+1) for i in range(10))
print(num_tuple1) # <generator object <genexpr> at 0x000001F2C5CD6960>

对于生成器来说,可以通过nextfor或者send来获取数据。一般情况下使用for来获取数据。

num_tuple1 = ((i, i+1) for i in range(10))
# print(num_tuple1)
for item in num_tuple1:
    print(item)

输出:

(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)
(6, 7)
(7, 8)
(8, 9)
(9, 10)

推导式中存在函数

def func():
    return 1

data_list = [func for i in range(10)]

# 函数未调用,所以不执行
# 输出[<function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>, <function func at 0x0000029B16FD3E20>]
print(data_list)

将lambda与推导式结合使用

data_list = [lambda: 100 for i in range(3)]
print(data_list)

这里使用lambda定义了一个匿名函数,这个函数的作用是返回100,且没有参数,此时data_list依然是一个函数,而且也没有执行。

所以输出结果为:

[<function <listcomp>.<lambda> at 0x000001B3FF3D5510>, <function <listcomp>.<lambda> at 0x000001B3FF3D4EE0>, <function <listcomp>.<lambda> at 0x000001B3FF3D5630>]  

推导式中包含函数

def func(num):
    return num + 1

data_list = [func(i) for i in range(10)]
print(data_list)

因为这个里面在data_list中,执行了函数func(i),因此data_list中包含了func(i)执行的结果。

返回结果如下:

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

当推导式中存在函数,需要注意作用域:

data_list = [lambda x: x+i for i in range(10)] # 这里只是声明了函数,并没有执行函数,所以i的值并不确定
print(data_list[5](100)) # 此时i的值已经是9了,data_list[5]表示取到了第五个函数,同时传参并执行函数,所以输出109
print(data_list[5](100)) # 此时i的值也已经是9了,所以也输出109

推导式的嵌套

一般情况下的推导式形式如下:

data = [i for i in range(10)]

嵌套的形式如下:

data = [(i, j) for j in range(5) for i in range(10)]
print(data)

从右往左开始执行。
这种形式等价于下面的形式:

data = []

for i in range(10):
    for j in range(5):
        data.append((i,j))

需求

请用列表推导式实现,对data_list中的每个元素判断,如果是字符串类型,则计算长度作为元素放在新列表的元素中,如果是整型,则让其值+100作为元素放在最新的列表的元素中。

data_list = [11, 22, 33, 'alex', 455, 'tom']

new_data_list = [ len(item) if type(item) == str else item + 100 for item in data_list ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python推导是一种简洁的语法糖,可以从一个数据序列构建另一个新的数据序列。常见的推导包括列表推导、字典推导和集合推导。列表推导可以通过对一个列表进行迭代和筛选操作,生成一个新的列表。字典推导可以通过对一个字典进行迭代操作,生成一个新的字典。而集合推导则可以通过对一个集合进行迭代和筛选操作,生成一个新的集合。推导在数据处理场景中非常常见,并可以大大简化代码的编写和阅读。如果你想了解更多关于推导的语法和用法,请参考引用和引用中提供的链接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python推导简单示例【列表推导、字典推导与集合推导】](https://download.csdn.net/download/weixin_38708361/12865890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python推导](https://blog.csdn.net/iprobobo/article/details/123582135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值