zoukankan      html  css  js  c++  java
  • python之列表推导式

    列表推到式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用以获得其结果生成新的元素,或者根据判定的条件创建子序列。

    每个列表推到式都在for后面跟一个表达式,然后有0个到多个for或者if字句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

    1,将列表中的每个元素乘以某个数,获得一个新的序列:

     1 #将列表元素乘以某个数,得到新列表
     2 a = [2,4,6] #定义列表
     3 b = [3*x for x in a] #通过for循环把列表lista中的每个元素循环出来,然后再乘以3
     4 print(b) #得到新列表 等同于print(list(b)) [6, 12, 18]
     5 print(tuple(b)) #得到新元组 (6, 12, 18)
     6 print(dict(b)) #发生错误 TypeError: cannot convert dictionary update sequence element #0 to a sequence
     7 print(set(b)) #得到新集合 {18, 12, 6}
     8 
     9 c = [[x,x*2] for x in a] #通过for循环读取a中的每个元素赋值给x,通过[x,x*2]得到新序列
    10 print(c) #得到嵌套列表c 等同于print(list(c)) [[2, 4], [4, 8], [6, 12]]
    11 print(tuple(c)) #得到元组嵌套列表 ([2, 4], [4, 8], [6, 12])
    12 print(dict(c)) #得到字典 {2: 4, 4: 8, 6: 12}
    13 print(set(c)) #发生错误 TypeError: unhashable type: 'list'

    2,对序列中的每个元素逐个调用某个方法:

     1 #对序列中的每个元素都调用某方法
     2 fruit = ['   banana',' loganberry ','passion fruit '] #定义列表,并且设置空格
     3 afterfruit = [weapon.strip() for weapon in fruit] #使用for循环循环读取列表每个元素,调用方法strpi()去除前后空格,并赋值给afterfruit
     4 print(afterfruit) #打印 ['banana', 'loganberry', 'passion fruit']
     5 
     6 upperFruit = [afterupper.upper() for afterupper in afterfruit] #循环读取afterfruit里的每个元素并调用方法upper()切换为答谢
     7 print(upperFruit) #打印 ['BANANA', 'LOGANBERRY', 'PASSION FRUIT']
     8 #以下再切回小写
     9 lowerFruit = [lower.lower() for lower in upperFruit] 
    10 print(lowerFruit)

    3,列表推到式用if子句过滤:

    1 #用if子句过滤条件
    2 a = [2,4,6] #定义列表
    3 b = [3 * x for x in a if x > 2] #循环读取列表a中的每个元素并赋值给临时变量x,如果满足x>2就执行x*3得到新序列
    4 print(b) #打印 [12, 18]
    5 
    6 c = [3 * x for x in a if x < 2]
    7 print(c) #[]

    4,列表推到式使用复杂表达式和嵌套函数:

     1 #列表推到式使用复杂表达式和嵌套函数
     2 '''
     3 使用round()函数返回浮点数floatx的四舍五入值,其中参数i表示表刘小数点后的几位
     4 使用for循环读取列表range(1,6)并把读取到的值赋值给i
     5 str()将浮点数转换成字符串
     6 '''
     7 floatx = 10/3 #定义浮点数
     8 a = [str(round(floatx, i)) for i in range(1,6)] #定义a
     9 print(floatx) #打印floatx 3.3333333333333335
    10 print(type(floatx)) #打印floatx的数据类型 <class 'float'>
    11 print(a) #打印a ['3.3', '3.33', '3.333', '3.3333', '3.33333']
    12 print(type(a)) #打印a的数据类型 <class 'list'>
    13 print(a[1]) #打印索引为1的值 3.33
    14 print(type(a[1])) #打印索引为1的值的数据类型 <class 'str'>

    5,循环的其他技巧演示:

     1 #循环和其他技巧
     2 v1 = [2,4,6] #定义列表v1
     3 v2 = [4,3,-10] #定义列表v2
     4 
     5 xc = [x * y for x in v1 for y in v2] #定义列表xc,结果是列表元素相乘的乘积
     6 print(xc) #打印 [8, 6, -20, 16, 12, -40, 24, 18, -60]
     7 
     8 xj = [x + y for x in v1 for y in v2] #定义列表相加,结果是列表元素相加的和
     9 print(xj) #打印 [6, 5, -8, 8, 7, -6, 10, 9, -4]
    10 
    11 aList = [v1[i] * v2[i] for i in range(len(v1))] #定义aList,结果是给定条件元素相加的和
    12 print(aList) # [8, 12, -60]
    13 print(len(v1)) #长度为3
    14 print(range(len(v1))) #range(0,3),取值为0,1,2
    15 print(len(aList)) #长度为3
    16 
    17 bList = [v1[i] * v2[j] for i in range(len(v1)) for j in range(len(v2))]
    18 '''bList表达式的取值为:[
    19         v1[0] * v2[0], v1[0] * v2[1], v1[0] * v2[2]
    20         v1[1] * v2[0], v1[1] * v2[1], v1[1] * v2[2]
    21         v1[2] * v2[0], v1[2] * v2[1], v1[2] * v2[2]
    22         ]
    23 共9个值
    24 '''
    25 #相关数值打印看是否符合预期
    26 print(len(bList))
    27 print(len(v1))
    28 print(len(v2))
    29 print(range(len(v1)),range(len(v2)))
    30 print(len(bList))

    6,嵌套列表解析:

     1 martix34 = [
     2     [1,2,3,4],
     3     [5,6,7,8],
     4     [9,10,11,12],
     5 ]
     6 martix43 = [[row[i] for row in martix34] for i in range(4)]
     7 print(martix43)
     8 '''
     9 解析:
    10 for row in martix34:
    11     print(row)
    12 循环读取了矩阵的三行
    13 然后每一行都是可迭代对象,就有索引和值
    14 row[i]就是根据i的值去取每行的值
    15 for i in range(4):
    16     print(i)
    17 i的取值范围为0,1,2,3
    18 整个表达式martix43就可以理解为:
    19                             [
    20     [row[0][0]],row[1][0],row[2][0]...
    21                             ]
    22 '''
    23 
    24 #也可以这样实现:
    25 transposed = []
    26 for i in range(4):
    27     transposed.append([row[i] for row in martix34])
    28 print(transposed)
    29 
    30 #还有一种方法:
    31 transposed = []
    32 for i in range(4):
    33     transposed_row = []
    34     for row in martix34:
    35         transposed_row.append(row[i])
    36     transposed.append(transposed_row)

    总之,列表推导式,前提必须有方括号,就是[]。

  • 相关阅读:
    django 笔记4 数据库操作
    html关于不换行代码
    之前搭建的jenkins的一些笔记
    pip报错
    ssh 免密及加密远程脚本实现
    今天了解了些redis和memcached的知识
    django 笔记3
    来选择一款适合你网站的CMS建站程序吧
    如何预防和检测网页挂马?
    网页挂马方式
  • 原文地址:https://www.cnblogs.com/mafu/p/13230793.html
Copyright © 2011-2022 走看看