列表推导式
# 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)