18、Python 教程 - Python中的列表,字典,集合生成式

一、列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

实例1:
要求生成一个列表,列表元素分别为[1**1,2**2....9**9]
若使用循环写:

li = []
for i in range(1, 10):
    li.append(i ** i)
print(li)

使用列表生成式可以达到同样的效果且代码更加简单:

print([i ** i for i in range(1, 10)])

实例2:
要求找出1~10之间的所有偶数

使用列表生成式:

print([i for i in range(1, 11) if i % 2 == 0])

输出结果为:

[2, 4, 6, 8, 10]

实例3:
使用列表生成式实现字符串的拼接:

s1 = 'ABC'
s2 = '123'
print([i + j for i in s1 for j in s2])

输出结果为:

['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

实例4:
使用列表生成式找出1~10之间的所有偶数 并且返回一个列表(包含以这个偶数为半径的园的面积):

import math
print([math.pi * r * r for r in range(2, 11, 2)])

输出结果为:

[12.566370614359172, 50.26548245743669, 113.09733552923255, 201.06192982974676, 314.1592653589793]

实例5:
使用列表生成式 列表的字符串的大写改成小写,不是字符串的去掉:

li = ['hello','World',24,24,41,7,8,False,'Apple']
print([s.lower() for s in li if isinstance(s,str)])			#函数isinstance判断s是否为str类型

输出结果为:

['hello', 'world', 'apple']

二、字典生成式

Python内置的一种极其强大的生成字典的表达式。返回结果必须是字典

实例1:
使用字典生成式 实现:
假设有20个学生,学生的分数在60~100之间,筛选出成绩在90 分以上的学生

生成学生分数信息:

import random

stuInfo = {
   
     }

for i in range(20):
    name = 'redhat' + str(i)
    score = random.randint(60, 100)
    stuInfo[name] = score

若使用循环实现筛选:

for name, score in stuInfo.items():
    if score > 90:
        highscore[name] = score
print(highscore)

若使用字典生成式实现筛选:

print({
   
     name: score for name, score in stuInfo.items() if score > 90})

输出结果为:

{
   
     'redhat3': 92, 'redhat4': 93, 'redhat6': 96, 'redhat7': 96, 'redhat8': 91, 'redhat9': 92, 'redhat19': 91}

实例2:
使用字典生成式 实现:
将一个字典中所有的key值都变成大写

若使用循环实现筛选:

d = dict(a=1, b=2)
new_d = {
   
     }
for i in d:
    new_d[i.upper()] = d[i]
print(new_d)

若使用字典生成式实现筛选:

print({
   
     k.upper(): v for k, v in d.items()})

输出结果为:

{
   
     'A': 1, 'B': 2}

实例2:
使用字典生成式 实现:
将一个字典中的大小写的key值合并,统一以小写输出

若使用循环实现筛选:

d = dict(a=1, b=2, c=3, B=8, A=11)
# a:12 b:10  c:3
new_d = {
   
     }
for k, v in d.items():
    low_k = k.lower()
    if low_k not in new_d:
        new_d[low_k] = v
    else:
        new_d[low_k] += v
print(new_d)

若使用字典生成式实现筛选:

print({
   
     k.lower(): d.get(k.upper(), 0) + d.get(k.lower(), 0) for k in d})

输出结果为:

{
   
     'a': 12, 'b': 10, 'c': 3}

三、集合生成式

示例:

print({
   
     i ** 2 for i in {
   
     1, 2, 3}})
print({
   
     i ** 2 for i in {
   
     1, 2, 3, 9, 12} if i % 3 == 0})

输出结果为:

{
   
     1,4,9}
{
   
     81, 9, 144}