【发布时间】:2018-04-29 09:11:58
【问题描述】:
我正在尝试转换这个函数:
templist = []
for each in characters:
if each in vowels:
templist.append('v')
elif (each in alphabet) & (each not in vowels):
templist.append('c')
else:
templist.append('?')
characters = templist
print(characters)
进入列表理解
modified_list = ['v' for each in characters for item in vowels
if item in vowels
else 'c' if (item in alphabet) & (item not in vowels)
else '?']`
有点卡在这里!无法弄清楚我做错了什么。
【问题讨论】:
-
你为什么用
&而不是and? -
另外,你为什么要把所有的东西都塞进一个列表理解中?原始代码格式更具可读性。
-
是的,请注意,如果您曾经确实阅读过您的 elif,
not in vowels将*始终是True,因为您已经首先检查了if each in vowels跨度> -
@roganjosh 你想使用列表推导,因为列表推导在 python 中获得性能提升。在这种情况下,列表推导式是用于迭代和返回列表的最佳结构。如果他们只是迭代一个循环而不期望从中得到一个数组,那么普通的 for 循环将是最高效的。
-
@adambullmer 我高度高度不同意。您应该在 可读 的地方使用列表理解,不使用副作用,并且您希望
list作为最终结果。列表理解带来的性能提升是微不足道的。