使用条件语句的嵌套for循环的列表理解?

时间:2020-01-23 17:13:49

标签: python list for-loop list-comprehension

我正在研究列表理解,虽然我看到很多讨论可以回答我的问题,但是我还没有看到将下面的代码制成列表理解。

# example array and counter var

rotated = [['#', '.', 'X', 'X', 'X'], ['.', '.', 'X', 'X', 'X'], ['X', '#', '#', '.', '.'], ['X', 'X', 'X', 'X', 'X']]
shot = 0

# I dont know how to turn the example code below this into its list comprehension form. 

for i in rotated:
        for j in i:
            if j == "#":
                break
            elif j == "X":
                shot += 1

我知道它不但不按原样使用(嵌套的for循环)有点意义,而且我想看看是否有可能编写等效的列表理解或生成器表达式。

1 个答案:

答案 0 :(得分:1)

您可以按以下方式单线执行此操作-使用''.join()从每个子列表中的字符创建一个字符串,使用split('#')[0]将它们转换为第一次出现的所有字符#,然后是count('X'),它给出了字符串中X个字符的数量。最后,我们使用sum()将所有数字加在一起。

>>> rotated = [['#', '.', 'X', 'X', 'X'], ['.', '.', 'X', 'X', 'X'], ['X', '#', '#', '.', '.'], ['X', 'X', 'X', 'X', 'X']]
>>> sum(''.join(x).split('#')[0].count('X') for x in rotated)
9