Python--推导式

推导式是Python中很强大的,很受欢迎的特性,具有语言简洁,速度快等优点.

推导式包括:1.列表(list)推导式  2.字典(dict)推导式  3.集合(set)推导式

一、列表推导式

1、使用[]生成list

例:

<1>求整除3的数字列表

  
numbers=[]
for x in range(100):
    if x%3==0:
       numbers.append(x)
    print(numbers)

使用推导来实现

  
numbers=[x for x in range(100) if x%3==0]
print(numbers)

执行命令得到

  
.
.
.
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

<2> def是一个关键字 用来声明函数

        def声明函数的格式为

        def 函数名(参数1,参数2..参数n):

                函数体

求0-29之间三的倍数值得

  
def squared(x):
    return x*x#返回值
multiples=[squared(i) for i in range(30) if i % 3 is 0]
print(multiples)

执行命令得

 
[0, 9, 36, 81, 144, 225, 324, 441, 576, 729]

2、使用()生成 generator将列表推导式的[]改成()即可得到生成器。

 
multiples=(i for i in range (30) if i % 3 is 0)
print(type(multiples))

执行命令得

 
<class 'generator'>

二、字典推导式

字典推导和列表推导的使用方法是类似,只不过中括号改成了大括号.直接举例说明:

例:

<1>大小写key合并

 
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
    k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
    for k in mcase.keys()
    if k.lower() in ['a','b']
}
print (mcase_frequency)

执行命令得

 
{'a': 17, 'b': 34}

<2>快速更换key和value

 
mcase={'a':10,'b':34}
mcase_frequency={v:k for k,v in mcase.items()}
print(mcase_frequency)

执行命令得

 
{10: 'a', 34: 'b'}

三、集合推导

他跟列表推导式也是类似的,唯一的区别在于它使用的是花括号{}

例:

<1>求列表里的2次幂

 
squared={x**2 for x in [1,1,2]}
print(squared)

执行命令得

 
{1, 4}

<2>使用集合推导 字符串的长度的集合

 
strings=['a','is','with','if','file','exception']
set={len(s) for s in strings}#有长度相同的{}会只留一个[]多个,这在实际中也非常有用
print(set)

执行命令得

 
{1, 2, 4, 9}

练习

<1>0-9的次方

 
squares=[]
for x in range(10):
 squares.append(x**2)
print(squares)
# 使用推导实现
squares=[x**2 for x in range(10)]
print(squares)

执行命令得

 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

<2>将单词长度大于3的转为大写输出

 
names=['bob','tom','alice','jerry','wendy','smith']
print([name.upper() for name in names if len(name)>3])

执行命令得

 
['ALICE', 'JERRY', 'WENDY', 'SMITH']

<3>求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

 
num=[(x,y) for x in range(5) if x%2==0 for y in range(5) if y%2==1]
print(num)

执行命令得

 
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]

<4>求m中3,6,9组成的列表

 
m=[[1,2,3],[4,5,6],[7,8,9]]
f=[row[2] for row in m]
print(f)
# 或者
f=[m[row][2] for row in (0,1,2)]
print(f)

执行命令得

 
[3, 6, 9]

<5>求m中1,5,9组成的列表

 
m=[[1,2,3],[4,5,6],[7,8,9]]
g=[m[i][i]for i in range(len(m))]
print(g)

执行命令得

 
[1, 5, 9]

<6>求m,n中矩阵各个元素的乘积

 
m=[[1,2,3],[4,5,6],[7,8,9]]
n=[[2,2,2],[3,3,3],[4,4,4]]
f=[m[row][col]*n[row][col]for row in range(3) for col in range(3)]
g=[[m[row][col]*n[row][col]for col in range(3)] for row in range(3)]
j=[[m[row][col]*n[row][col]for row in range(3)] for col in range(3)]
print(f)
print(g)
print(j)

执行命令得

 
[2, 4, 6, 12, 15, 18, 28, 32, 36]
[[2, 4, 6], [12, 15, 18], [28, 32, 36]]
[[2, 12, 28], [4, 15, 32], [6, 18, 36]]

<7>结合两个列表的元素,如果元素之间不相等的话生成列表

 
combs=[]
for x in [1,2,3]:
    for y in [3,1,4]:
        if x!=y:
            combs.append((x,y))
print(combs)
# 推导
combs=[(x,y)for x in [1,2,3]for y in [3,1,4] if x!=y]
print(combs)
执行命令得
 
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

<8>创建一个列表求2次幂形式如(number,square)

 
m=[(x,x**2) for x in range(6)]
print(m)

执行命令得

 
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

猜你喜欢

转载自blog.csdn.net/vanchaoi/article/details/80157361