mccabe icon indicating copy to clipboard operation
mccabe copied to clipboard

Complexity in list comprehensions

Open Peque opened this issue 5 years ago • 2 comments

Having asdf.py:

elements = [0, 1, 2, 3, 4]
ignore = [1, 2]


def loop():
    for x in elements:
        if x in ignore:
            continue
        print(x)


def comprehension():
    filtered = [x for x in elements if x not in ignore]
    for x in filtered:
        print(x)


loop()
print('----')
comprehension()

The McCabe complexity in loop() seems to be higher than in comprehension():

$ python -m mccabe asdf.py 
5:0: 'loop' 3
12:0: 'comprehension' 2

Is that really expected? Should not fors and ifs in list comprehensions count towards total complexity?

Peque avatar Dec 03 '18 09:12 Peque

To be hones I seen a lot of abuse related to list comprehensions, with nesting and other stuff that reduced the readability and maintainability of the code considerably.

Shorter is no always better. I would be very happy if mccabe would not promote people to trick complexity-score by using list comprehensions.

ssbarnea avatar May 15 '20 09:05 ssbarnea

I would be very happy if mccabe would not promote people to trick complexity-score by using list comprehensions.

This assumes bad intent on the part of the author and maintainers which is unwelcome.

sigmavirus24 avatar May 15 '20 11:05 sigmavirus24