List Comprehensions,即列表生成式,用来创建list
举例:我们要生成从1到10的list可以直接用range:
>>> list(range(1,11)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
那如果要生成从1×1到10×10呢?之前学过的for循环可以实现:
>>> for x in range(1,11): L.append(x*x) >>> L [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
可以是可以实现,但是代码有点复杂,这时候用列表生成式只需一行就可以完成:
>>> [x * x for x in range(1,11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
列出要生成的内容x*x,后面跟一个for循环,for循环后面还可以跟if判断,比如列出1到10里偶数的平方:
>>> [x * x for x in range(1,11) if x % 2 == 0] [4, 16, 36, 64, 100]
for循环可以使用两个甚至多个变量,例如同时调用字典中的key和value:
>>> d={'x':'a','y':'b','z':'c'} >>> for k,v in d.items(): print(k,'=',v) x = a y = b z = c
用列表生成式也可以实现:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } >>> [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C']
再来个例子,把list中字符里的大写全部换为小写:
>>> L = ['Hello','World','Woodman','Zhang'] >>> [s.lower() for s in L] ['hello', 'world', 'woodman', 'zhang']
列表生成式中的if
列表生成式的中,for前面的if…else是表达式,而for后面的if是过滤条件,不能带else
>>> [x for x in range(1,11) if x%2==0] [2, 4, 6, 8, 10] >>> [x for x in range(1,11) if x%2==0 else 0] SyntaxError: invalid syntax >>> [x if x%2==0 for x in range(1,11)] SyntaxError: invalid syntax >>> [x if x%2==0 else -x for x in range(1,11)] [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10] >>> [x if x%2==0 for x in range(1,11) else -x] SyntaxError: invalid syntax