简介
力扣第2129题:将标题首字母大写,第一版本的解答为:
class Solution:
def capitalizeTitle(self, title: str) -> str:
return " ".join([li.capitalize() for li in title.split(" ") if len(li)>2 else li.lower()])
结果:报错。
然后意识到如何嵌套了if else
语句到for
循环中,缩写似乎和直接用for
循环不太一样。
主要区别在位置上:完备的语句写在for循环前,只有if
语句时写在for循环后。
改写后为:
class Solution:
def capitalizeTitle(self, title: str) -> str:
return " ".join([li.capitalize() if len(li)>2 else li.lower() for li in title.split(" ")])
用法
- 如果for循环中只有
if
语句,可以直接写在for
循环后面,如下:
s = [1,2,3,4,5]
res = [i for i in s if i>2] # res=[3,4,5]
该语句等同于:
s = [1,2,3,4,5]
res = []
for i in s:
if i >2:
res.append(i)
- 但如果将
if...else...
语句补完,必须要写在for
循环前:
s = [1,2,3,4,5]
res = [i if i>2 else 0 for i in s] # res=[0,0,3,4,5]
该语句等同于:
s = [1,2,3,4,5]
res = []
for i in s:
if i >2:
res.append(i)
else:
res.append(0)
python的这种列表内的缩写可以节省for
循环和if...else...
判断语句的站位,但是还是很容易出错,写的时候要注意。