Home > Enterprise >  Fill lists in list with zeros if their length less than
Fill lists in list with zeros if their length less than

Time:12-19

I have a list of lists with different sizes but I want to make them all the same length. For example, make them with length of 5 by padding with zeros if length less than 5 or cut the list if length is more than 5. For example, I have a list:

foo = [
    [1, 2, 3],
    [1, 2, 3, 4, 5],
    [1, 2, 3, 4, 5, 6, 7]]
result = [
    [1, 2, 3, 0, 0],
    [1, 2, 3, 4, 5],
    [1, 2, 3, 4, 5]]

Do you have an idea of optimal and fast solution, if the list of lists is large?

CodePudding user response:

List comprehension

Make a fill list and use slicing to get the appropriate lengths.

n = 5
fill = [0] * n
result = [sublist[:n]   fill[len(sublist):] for sublist in foo]

CodePudding user response:

Actually, I found a pretty fast solution for me. If you have an idea how to solve it without a for loop please post.

for row in foo:
    while len(row) < 5:
        row.append(0)
    else:
        row[:5]

CodePudding user response:

result = []
for sublist in foo:
    size = len(sublist)
    result.append(sublist[:5]   [0]*(5 - size))

CodePudding user response:

To perform this optimization, i sliced additional elements beyond n = 5, and replaced with 0 those not reaching n = 5 by checking how many elements they miss.

def listOptimization(foo, n):
# slicing foo to have n elements on all child elements of foo
for i in range(len(foo)):
    foo[i] = foo[i][:n]

# optimizing
for i in range(len(foo)):
    # check if foo child element is less than n
    # if true, append to the list with 0 depending on how many
    # elements to reach n
    if len(foo[i])<n:
        temp = n-len(foo[i])
        for x in range(temp):
            foo[i].append(0)

return foo
  • Related