繁体   English   中英

这段代码是做什么的,python

[英]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条件表达式的一部分, ifx 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM