首页 > 解决方案 > 嵌套 for 和 if 在列表推导中

问题描述

我有以下代码,其中有 for 和 if 。

lines = ['apple berry Citrus ', 34, 4.46, 'Audi Apple ']

corpus = [ ]

for line in lines:

    # Check if the element is string and proceed
    if isinstance(line, str):

        # Split the element and check if first character is upper case
        for word in line.split():
            if word[0].isupper():
                
                # Append the word to corpus result
                corpus.append(word)
print(corpus)
# Output : ['Citrus', 'Audi', 'Apple']

我试图在列表理解中做到这一点,但失败了。我已经尝试如下。

# corpus = [  word if word[0].isupper() for word in line.split()  for line in lines if isinstance(line, str)]

我怎样才能在列表理解中实现这一点?

标签: pythonpython-3.xlistpython-2.7list-comprehension

解决方案


以下将起作用:

corpus = [
    word for line in lines if isinstance(line, str) 
         for word in line.split() if word[0].isupper()
]

嵌套推导中的范围起初可能会令人困惑,但您会注意到 and 的顺序forif嵌套循环中的顺序相同。


推荐阅读