使用if else条件列出Python中字符串的理解

时间:2017-10-30 22:32:25

标签: python string list list-comprehension

hidden_word = ""
for c in word:
     hidden_word += c if c in guesses else'-'
return hidden_word

我正在尝试使用列表理解在单行代码中完成此操作,但是遇到if-else条件工作并且认为我缺少某些东西时遇到了麻烦。基本上如果word ='yes'并且猜测包含'e',那么结果应该是'-e-'。我能够恰当地写出这封信,但是如果这封信没有猜到的话,就会把' - '放在逻辑上。

1 个答案:

答案 0 :(得分:4)

我认为你的代码很好 - 它得到了重点。为什么要使用列表推导(然后将其转换回字符串)?

using namespace std;

这真的更好吗?您可以将其更改为生成器表达式,但仍然...

hidden_word = ''.join([c if c in guesses else '-' for c in word])

编辑:使用以下字符“1000”对其进行测试:

hidden_word = ''.join(c if c in guesses else '-' for c in word)

结果:

import timeit
setup = """import random
chars = "abcdefghijklmnopqrstuvwxyz"
s = "".join(random.choice(chars) for _ in range(1000))
guesses = "agjoxwz"
"""

t1 = "hidden_word = ''.join([c if c in guesses else '-' for c in s])"
t2 = "hidden_word = ''.join(c if c in guesses else '-' for c in s)"
t3 = """hidden_word = ""
for c in s:
     hidden_word += c if c in guesses else '-'"""

哇。因此,列表理解实际上必须更快(并且比生成器表达式更好)。

每个“单词”只有50个字母,差异不太明显,但列表理解仍然胜出:

In [24]: timeit.timeit(setup=setup, stmt=t1)
Out[24]: 100.88796829901968

In [25]: timeit.timeit(setup=setup, stmt=t2)
Out[25]: 147.86355467070305

In [26]: timeit.timeit(setup=setup, stmt=t3)
Out[26]: 247.9441536138757
相关问题