[英]What is this piece of code doing, python
我是自学python,我正在做一个练习,解决方案发布在这个帖子中。 任何人都可以将这段代码的含义翻译成英文吗? 当我学习if语句时,我从未遇到过这种语法。
consonants = 'bcdfghjklmnpqrstvwxz'
return ''.join(l + 'o' + l if l in consonants else l for l in s)
这是一段较长的代码,作为生成器编写。 这是它的样子,更多的是。
consonants = 'bcdfghjklmnpqrstvwxz'
ls = []
for l in s:
if l in consonants:
ls.append(l + 'o' + l)
else:
ls.append(l)
return ''.join(ls)
它遍历s
并检查l
是否在字符串consonants
。 如果是,则将l + 'o' + l
推送到列表中,如果不是,则只需按l
。
然后使用''.join
将结果连接到一个字符串中,然后返回。
更准确(作为发电机):
consonants = 'bcdfghjklmnpqrstvwxz'
def gencons(s):
for l in s:
if l in consonants:
yield l + 'o' + l
else:
yield l
return ''.join(gencons(s))
gencons
只是一个任意名称,我给了生成器函数。
这段代码既不包含if
语句也不包含for
循环。 您最容易理解,因为语句不能嵌入到表达式中,例如作为参数传递给join
的表达式。
consonants = 'bcdfghjklmnpqrstvwxz'
return ''.join(l + 'o' + l if l in consonants else l for l in s)
if
是条件表达式的一部分, if
是x if y else z
,则其形式为x if y else z
。 与if
语句不同, else
是必需的,因为表达式必须具有值,无论y
是否为真。 如果y
为真,则值为x
; 否则,该值为z
。 在这种情况下,该值是l + 'o' + l
(当l
是辅音时)或l
本身。
for
关键字用于表示生成器表达式 ,您可以将其视为基于另一个序列生成值序列的方法。 在这里,我们从一些序列开始,并为该序列中s
每个字符l
生成另一个值。 结果序列由join
以生成新字符串。
(稍微偏离主题,但显式传递列表而不是生成器join
更有效,因为它需要首先构建一个列表,以确定为结果字符串分配多少空间。
return ''.join([l + 'o' + l if l in consonants else l for l in s])
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.