【发布时间】:2018-03-31 19:40:22
【问题描述】:
对于强盗的语言挑战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 变量,而不是仅使用 =,这将导致此示例中的答案仅为“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 中查看过,但这很困难,因为我不知道作为一个对编码非常陌生的人我在寻找什么。我有一种感觉,这是非常基本的事情,我应该知道答案才能尝试这样的事情,但是在这一点上,如果我不问我不会知道。 谢谢。
【问题讨论】:
-
Explanation of how list comprehension works? -- 你拥有的是一个 genexp,但差异不是很相关。类似地:What does "list comprehension" mean? How does it work and how can I use it?——并解释这些解释与您在这里的内容有何关系,stackoverflow.com/questions/43943573
-
括号中的表达式是“生成器表达式”。如果您用方括号替换括号,那将是“列表理解”。无论哪种方式,它都会生成一个可迭代的字符串序列(例如,“HoH”、“e”、“lol”……)。然后
"".join()表达式将所有这些组合成一个字符串(查找str.join以获取更多详细信息)。 -
在传递join时,最好使用列表推导,因为join需要构建一个列表。这样更快。
-
感谢您的帮助和提供的资源/链接。我不知道 Python 中有这个有用的功能。
标签: python