Понимание списка для вложенных циклов с условными операторами? - PullRequest
1 голос
/ 23 января 2020

Я изучаю понимание списка, и, хотя я видел много обсуждений, чтобы ответить на мои вопросы, я еще не видел код, подобный приведенному ниже, который превращен в понимание списка.

# 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

Я знаю, что несколько бессмысленно не просто использовать его как есть (вложенный для l oop), но я хотел бы посмотреть, возможно ли написать эквивалентное понимание списка или генератор выражение.

1 Ответ

1 голос
/ 23 января 2020

Вы можете сделать это в одну строку следующим образом - используйте ''.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
...