python--推导

”’推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点。推导式包括:

1.列表推导式

2.字典推导式

3.集合推导式

一、列表推导式

例如1:整除6的数字列表

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

执行命令得

[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]

使用推导实现

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

执行命令得(结果相同)

[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]

例如:2.一百以内7的倍数的平方

def squared(x):
    return x**2
num=[squared(x) for x in range(100) if x%7==0]
print(num)
print(type(num))

执行命令得

[0, 49, 196, 441, 784, 1225, 1764, 2401, 3136, 3969, 4900, 5929, 7056, 8281, 9604]

例3:使用()生成 generator将列表推导式的[]改成()即可得到生成器。–yeild

def squared(x):
    return x**2
num=(squared(x) for x in range(100) if x%7==0)
print(num)
print(type(num))
for i in num:
    print(i)

执行命令得

<generator object <genexpr> at 0x005FCC00>
<class 'generator'>
0
49
196
441
784
1225
1764
2401
3136
3969
4900
5929
7056
8281
9604

二、字典推导式

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

例如:1.快速更换key和value

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

执行命令得

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

三、集合推导式

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

字典推导也是{区别在于字典里面是 key:value}
例如:1.

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

执行命令得

{1, 4, 9}#无序 唯一不重复

例2: 用集合推导 字符串长度的集合

strings = ['a','is','with','if','file','exception']
lens=[len(s) for s in strings]
len={len(s) for s in strings}
print(lens)
print(len)

执行命令得

[1, 2, 4, 2, 4, 9]
{1, 2, 4, 9}

有长度相同的{}会只留一个 []多个,这在实际上也非常有用

练习 0到9 的次方

squares = []
for x in range(10):
    squares.append(x**2)
print(squares)

执行命令得

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

同样可以用推导实现

squares = [x**2 for x in range(10)]
print(squares)

执行命令得(结果相同)

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

练习2.求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

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

执行命令得

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

练习3.求m中3,6,9组成的列表

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

执行命令得

[3, 6, 9]

求m中7,5,3组成的列表 或者1,5,9

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

执行命令得

[1, 5, 9]
[3, 5, 7]

求m,n中矩阵各个元素的乘积.通过元素下标组成个个数据

m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]
for i in range(len(m)):
    for j in range(len(m[i])):
        print(m[i][j]*n[i][j],end=' ')
#用推导    
s=[m[i][j]*n[i][j] for i in range(len(m)) for j in range(len(m[i]))]
print(s)

执行命令得

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

结合两个列表的元素,如果元素之间不相等的话

a=[1,2,3]
b=[1,5,7]
c=[2,5,8]
for i in a:
    for j in b:
        for k in c:
            if i!=b  and j!=k and i!=k:
                print((i,j,k),end=' ')
print()
print([(i,j)for i in a for j in b if i!=b])

执行命令得

(1, 1, 2) (1, 1, 5) (1, 1, 8) (1, 5, 2) (1, 5, 8) (1, 7, 2) (1, 7, 5) (1, 7, 8) (2, 1, 5) (2, 1, 8) (2, 5, 8) (2, 7, 5) (2, 7, 8) (3, 1, 2) (3, 1, 5) (3, 1, 8) (3, 5, 2) (3, 5, 8) (3, 7, 2) (3, 7, 5) (3, 7, 8) 

create a list of 2-tuples like (number, square)

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

执行命令得

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

猜你喜欢

转载自blog.csdn.net/weixin_42067855/article/details/80431121
今日推荐