列表推导式语法与应用案例列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。列表推导式在逻辑上等价于一个循环语句,只是形式上更加简洁。语法形式为:[expression for expr1 in sequence1 if condition1...for exprN in sequenceN if conditionN]列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。>>> aList = [x*x for x in range(10)]#相当于>>> aList = []>>> for x in range(10):aList.append(x*x)>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']>>> aList = [w.strip() for w in freshfruit]#等价于下面的代码>>> aList = []>>> for item in freshfruit:aList.append(item.strip())使用列表推导式实现嵌套列表的平铺。>>> vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> [num for elem in vec for num in elem][1, 2, 3, 4, 5, 6, 7, 8, 9]在这个列表推导式中有2个循环,其中第一个循环可以看作是外循环,执行的慢;而第二个循环可以看作是内循环,执行的快。上面代码的执行过程等价于下面的写法:>>> vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> result = []>>> for elem in vec:for num in elem:result.append(num)>>> result[1, 2, 3, 4, 5, 6, 7, 8, 9]在列表推导式中使用if过滤不符合条件的元素。在列表推导式中可以使用if子句对列表中的元素进行筛选,只在结果列表中保留符合条件的元素。下面的代码可以列出当前文件夹下所有Python源文件:>>> import os>>> [filename for filename in os.listdir('.') if filename.endswith(('.py', '.pyw'))]从列表中选择符合条件的元素组成新的列表:>>> aList = [-1, -4, 6, 7.5, -2.3, 9, -11]>>> [i for i in aList if i>0] #所有大于0的数字[6, 7.5, 9]查找列表中最大元素的所有位置。>>> from random import randint>>> x = [randint(1, 10) for i in range(20)]#20个介于[1, 10]的整数>>> x[10, 2, 3, 4, 5, 10, 10, 9, 2, 4, 10, 8, 2, 2, 9, 7, 6, 2, 5, 6]>>> m = max(x)>>> [index for index, value in enumerate(x) if value == m]#最大整数的所有出现位置[0, 5, 6, 10]在列表推导式中同时遍历多个列表或可迭代对象。>>> [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y][(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]对于包含多个循环的列表推导式,一定要清楚多个循环的执行顺序或“嵌套关系”。例如,上面第一个列表推导式等价于>>> result = []>>> for x in [1, 2, 3]:for y in [3, 1, 4]:if x != y:result.append((x,y))>>> result[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
文章转载自阿语python,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




