对于强盗的语言挑战事物Wikipedia我挣扎于我有限的知识并想出了这个:
def translate(txt):
new_txt = ''
consonants = 'bcdfghjklmnpqrstvwxz'
for x in txt:
if x in consonants:
new_txt += x + 'o' + x
else:
new_txt += x
return new_txt
print(translate("Hello World"))
我理解+ =运算符用于附加new_txt变量,而不是使用just =,这将导致只有" dod"的回答。在这个例子中,它取代了for循环的每个循环,当x == d时离开最后一次运行。 我找到了几个解决这个问题的简单方法,但是我对Python和编码的经验缺乏,我无法理解这些答案的几个方面。 例如:
def translate(txt):
consonants = 'bcdfghjklmnpqrstvwxz'
new_txt = (x + 'o' + x if x in consonants else x for x in txt)
return ''.join(new_txt)
print(translate("Hello World"))
由几个用户在几个线程中提供不同级别的相似性,但是我不明白这是怎么回事
new_txt = (x + 'o' + x if x in consonants else x for x in txt)
return ''.join(new_txt)
部分与我提出的不同。这是什么类型的组件,它如何在new_txt字符串上执行+ =并附加
的每个后续循环的结果new_txt = (x + 'o' + x if x in consonants else x for x in txt)
行?是什么赋予了该语句持久性的结果,即为什么它不能替换输入的txt字符串的每个循环和字符?这个概念叫什么?我已经在网上和StackOverflow中查看了,但这很难,因为我不知道我作为一个非常陌生的人正在寻找什么。我觉得这是一个非常基本的东西,我应该知道答案,以便尝试这样的事情,但是在这一点上,如果我不问我不会知道。 谢谢。
答案 0 :(得分:0)
这类似于列表推导,它将是相同的,但使用[] -brackets。上面的代码作为列表理解将是:
new_txt = [x + 'o' + x if x in consonants else x for x in txt]
return ''.join(new_txt)
列表推导(和词典,集合理解)是一种替代循环的pythonic方法。因此,不是编写一个或多个循环,而是可以使用单行代码作为上面提到的列表理解。它还用于替换map(),reduce()和filter()等函数。可以使用for循环重写该示例:
new_txt = []
for x in txt:
if x in consonants:
new_text += x + 'o' + x
else:
new_text += x
return ''.join(new_text)
join方法将列表的每个元素与之前指定的分隔符连接起来,在本例中为空字符串,因此基本上没有分隔符。
列表推导的结构通常如下:
[x for x in iterable]
您也可以添加条件。这是通过您提供给我们的示例完成的。
有关详细信息,请查看DataCamp中的this great tutorial。
希望它对你有所帮助。 此致。