Python 有人能帮我理解什么';使用';dw';[w.isalpha()]?
代码部分来自CheckIO的解决方案。我从来没有见过这样的东西,我不明白它是怎么工作的。有没有人能给我一个解释,或者给我指出一些可以让我理解这里发生了什么的资源 问题如下:给您一个字符串,其中的单词和数字由空格(一个空格)分隔。这些单词只包含字母。您应该检查字符串是否连续包含三个单词。例如,字符串“start 5 1 2 3 7 end”连续包含三个单词 我试图理解的解决方案是:Python 有人能帮我理解什么';使用';dw';[w.isalpha()]?,python,string,python-3.x,isalpha,Python,String,Python 3.x,Isalpha,代码部分来自CheckIO的解决方案。我从来没有见过这样的东西,我不明白它是怎么工作的。有没有人能给我一个解释,或者给我指出一些可以让我理解这里发生了什么的资源 问题如下:给您一个字符串,其中的单词和数字由空格(一个空格)分隔。这些单词只包含字母。您应该检查字符串是否连续包含三个单词。例如,字符串“start 5 1 2 3 7 end”连续包含三个单词 我试图理解的解决方案是: def three_words(words: str) -> bool: return 'www' i
def three_words(words: str) -> bool:
return 'www' in ''.join('dw'[w.isalpha()] for w in words.split())
特别是'dw'[w.isalpha()]
。当w.isalpha()。没有任何明显的操作员,很难理解为什么会发生这种情况
我尝试分解代码以更清楚地了解发生了什么:
def three_words(words: str) -> bool:
words_or_digits = []
for w in words.split():
print('dw'[w.isalpha()])
words_or_digits += 'dw'[w.isalpha()]
print(words_or_digits)
return 'www' in ''.join(words_or_digits)
这一点证实了我的怀疑,但仍不完全清楚为什么会这样。我还尝试使用dis
进行调查,但我也不确定我是否理解其结果。这是在中添加dis
时得到的输出:
from dis import dis
def three_words(words: str) -> bool:
words_or_digits = []
for w in words.split():
print('dw'[w.isalpha()])
dis('dw'[w.isalpha()])
words_or_digits += 'dw'[w.isalpha()]
print(words_or_digits)
return 'www' in ''.join(words_or_digits)
three_words("He is 123 man")
提前感谢您提供的任何帮助或理解。isalpha()
返回布尔值。布尔值可以是False或True,但也可以是0
或1
,因为bool
是int
的子类。因此,您在这里看到的是'dw'[0]
或'dw'[1]
。如果w.isalpha()或'd'
@MartijnPieters使用更为惯用的Python编写,则将使用'w'。谢谢您的解释!那帮了大忙!
w
1 0 LOAD_NAME 0 (w)
2 RETURN_VALUE
w
1 0 LOAD_NAME 0 (w)
2 RETURN_VALUE
d
1 0 LOAD_NAME 0 (d)
2 RETURN_VALUE
w
1 0 LOAD_NAME 0 (w)
2 RETURN_VALUE
['w', 'w', 'd', 'w']