Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Find out different lengths with values in a two-dimensional list, depending on the number given as a parameter

Suppose I have a two-dimensional list mixed with True and False. I would like to create a function that gives me an additional parameter, which should be the number of elements to be output. The output should be like this:
For example, if I enter 3 as a number, the row and column in which 3 x True are located one after the other should be displayed.
So just the row and the first column
For example, in the list below:
3 x True in row: 1 and col: 3

lst = [[False, True, False, True, True, False],
        [False, True, False, True, True, True],
        [True, False, True, True, True]]

I’ve tried several options, but never found a solution. I have another small example here, but of course I get the wrong output:

def baz(count):
    for row in range(len(lst)):
        for col in range(len(lst[row])):
            if lst[row][col] == lst[row][(col + count) % len(lst[row])] and lst[row][col] is True:
                return (row, col)


print(baz(3))

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You can use all to simplify the code, it returns True if all values in the iterable are True otherwise False.

lst = [[False, True, False, True, True, False],
        [False, True, False, True, True, True],
        [True, False, True, True, True]]

def baz(count):
    for row in range(len(lst)):
        if len(lst[row]) < count:
            continue
        for col in range(len(lst[row])-count+1):
            if all(lst[row][col:col+count]):
                return (row, col)
    return None


print(baz(3))
print(baz(2))

prints –

(1, 3)
(0, 3)

Note that there can be multiple matches for a given count, so the function returns the first match found.

Also, for high values of count, above code is not optimal(since in each step we are doing O(count) work when we call all(). So in case you are worried about performance you can use the below function instead –

def baz(count):
    for row in range(len(lst)):
        if len(lst[row]) < count:
            continue
        prev_true = -1
        for col in range(len(lst[row])):
            if not lst[row][col]:
                prev_true = col
                continue
            if col - prev_true == count:
                return (row, col-count+1)
    return None
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading