Python 有人能帮我理解什么';使用';dw';[w.isalpha()]?

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

代码部分来自CheckIO的解决方案。我从来没有见过这样的东西,我不明白它是怎么工作的。有没有人能给我一个解释,或者给我指出一些可以让我理解这里发生了什么的资源

问题如下:给您一个字符串,其中的单词和数字由空格(一个空格)分隔。这些单词只包含字母。您应该检查字符串是否连续包含三个单词。例如,字符串“start 5 1 2 3 7 end”连续包含三个单词

我试图理解的解决方案是:

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']