【Python】推导式

列表推导式

# list2里的每个元素是listl 中每个元素的2倍
list1 = [1,5,8,7]
list2 = []
for item in list1:
    list2.append(item * 2)
print(list2)

# 列表推导式
list2 = [item * 2 for item in list1]
print(list2)

if在前面是对每个元素不同情况的处理,if在后面是对原列表的过滤

只有一个if就放在后边,有if和else,就放在前边

# list2里的每个元素是listl 中每个奇数元素的2倍 (过滤)
list1 = [1,5,8,7]
list2 = []
for item in list1:
    # if item % 2 != 0:
    if item % 2 == 1:
        list2.append(item * 2)
print(list2)

# 列表推导式
list2 = [item * 2 for item in list1 if item % 2 == 1]
print(list2)

# list2里的每个元素是list1中每个奇数元素的2倍,偶数的一半 (处理)
list1 = [1, 5, 8, 7]
list2 = []
for item in list1:
    if item % 2 != 0:
        list2.append(item * 2)
    else:
        # list2.append(item / 2) python跟C++不一样,python需要用整除符号
        list2.append(item // 2)
print(list2)

list2 = [item * 2 if item % 2 != 0 else item // 2 for item in list1]
print(list2)

练习1

str1, str2 = input().split()
list1 = []
for s1 in str1:
    for s2 in str2:
        list1.append(s1 + s2)
print(list1)

list1 = [s1 + s2 for s1 in str1 for s2 in str2]
print(list1)

练习2

dict1 = {"jack":90, "pony":50, "li":70, "wang":60}
list1 = []
for k, v in dict1.items():
    if v < 80:
        list1.append(k + "=" + str(v))  # v是int类型,需要强转
print(list1)

list2 = [k + "=" + str(v) for k, v in dict1.items() if v < 80]
print(list2)

字典推导式

dict1 = {"name": "Li", "address": "BeiJing"}
dict2 = {}
for k, v in dict1.items():
    dict2[k] = v.lower()
print(dict2)

dict2 = {k:v.lower() for k, v in dict1.items()}   
print(dict2)

练习

list = input().split()
dict = {}
for item in list:
    dict[item] = list.count(item)
print(dict)

dict1 = {item: list.count(item) for item in list}
print(dict1)

元组推导式

​        如果利用列表推导式生成的列表中元素很多,而只使用前面几个元素会浪费大量内存空间。
生成器可以边循环边生成元素

# 生成器的方式打印,需要几个就打印几个
list1 = [1, 5, 8, 7]
tuple2 = (item * 2 for item in list1)
print(tuple2)

list1 = [1, 5, 8, 7]
tuple2 = (item * 2 for item in list1)
print(next(tuple2))
print(next(tuple2))
print(next(tuple2))
print(next(tuple2))
# 再多打一个就越界了
# next到没有元素会报错,可以使用for循环

list1 = [1, 5, 8, 7]
tuple2 = (item * 2 for item in list1)
for item in tuple2:
    print(item)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值