从零开始学Python-Day21-列表生成式

Python零基础 木人张 3年前 (2020-03-25) 725次浏览 0个评论 扫描二维码
文章目录[隐藏]

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

木人张,版权所有丨如未注明 , 均为原创,禁止转载。
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址