列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。
每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。
1、列表推导式
print("----------------------列表推导式--------------------")
list1 = [2,4,6]
printString=[3*x for x in list1 if x>2] #第一个for前面是输出的值,元组需要添加括号 可以有多个for或者if
print(printString)
#等同于上上述列表推导式
printString1=[]
for x in list1:
if x>2:
printString1.append(3*x)
print(printString1)
print("---------------表达式推导出一个元组---------------------")
list2 = [10,20,30]
print([[x,x**2] for x in list2 ])
print("----------对序列里每一个元素逐个调用某方法 strip()去掉前后空格-----------")
list3 = [" string"," python ","java "]
print([count.strip() for count in list3])
print("------两列表中的各项和---------")
list4 = [10,15,-8]
list5 = [7,24,-20]
print([x+y for x in list4 for y in list5])
print("------两列表中的各项积---------")
print([x*y for x in list4 for y in list5])
print("------两列表中的同索引积---------")
print([list4[i]*list5[i] for i in range(len(list4))])
结果:
2、嵌套列表
print("-------3*4的列表转换成4*3的列表-------")
listBefore = [[1,2,3,4],[10,20,30,40],[100,200,300,400]]
print([[row[i] for row in listBefore] for i in range(4)])
print("----与上述推导列表结果一样-----")
listAfter = []
for i in range(4):
After_row = [] # fter_row第一次值为[1,10,100] 第二次值为[2,20,200] 以此类推
for row in listBefore:
After_row.append(row[i]) #row[i] 1,10,100 2,20,200 以此类推
listAfter.append(After_row)
print(listAfter)