我正在自学python,我正在做一个练习,其解决方案发布在this主题中。任何人都可以将这段代码的含义翻译成英文吗?当我学习语句时,我从未遇到过这种语法。
consonants = 'bcdfghjklmnpqrstvwxz'
return ''.join(l + 'o' + l if l in consonants else l for l in s)
答案 0 :(得分:11)
这是一段较长的代码,作为生成器编写。这是它的样子,更多的是。
f.cktext_area
循环遍历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))
只是一个任意名称,我给了生成器函数。
答案 1 :(得分:0)
这段代码既不包含if
语句也不包含for
循环。您最容易理解,因为语句不能嵌入到表达式中,例如作为参数传递给join
的语句。
consonants = 'bcdfghjklmnpqrstvwxz'
return ''.join(l + 'o' + l if l in consonants else l for l in s)
if
是条件表达式的一部分,其形式为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])
)