0

I've been trying to figure out how I could code the following:

I have a list say:

L = [1, 2, 3, 4, 5]

I am trying to multiply each element in groups of 2 and so I'm expecting 4 lists at the end:

[-1, -2, 3, 4, 5]
[1, -2, -3, 4, 5]
[1, 2, -3, -4, 5]
[1, 2, 3, -4, -5]

Now with these 4 lists I intend to create a nested list again say:

M = [[-1, -2, 3, 4, 5], [1, -2, -3, 4, 5],[1, 2, -3, -4, 5], [1, 2, 3, -4, -5]]

So far I got this:

L = [1, 2, 3, 4, 5]
L2 = L.copy()
print(L)

for x in range(0,2):
    for y in range(x,2+x):
        N = []
        L2[y] = L2[y] * -1
        N.append(L2)
        print(N)

and it's showing as this

[1, 2, 3, 4, 5]
[[-1, 2, 3, 4, 5]]
[[-1, -2, 3, 4, 5]]
[[-1, 2, 3, 4, 5]]
[[-1, 2, -3, 4, 5]]

I can't generate the nested list because I don't know how to call a list whose elements have been modified from the loop I created. I am also having issues with my loop. I want it to read the old list in a fresh slate rather than referring to the altered list from the previous loop.

I'm very new to python but I am enjoying learning this new language. Often times I get stuck and easily figure out what I need to happen. This one is a bit trickier on my end so I am asking for help. Thanks!

1
  • I believe you can find the answer in this question. Just insert the answer from the thread into your codes with slight modification Turning a list into nested lists in python Commented Jun 30, 2020 at 10:55

2 Answers 2

2

Cool question. try this:

L = [1, 2, 3, 4, 5]

def foo(lst, inx):
    print(inx)
    new_l = lst.copy()
    new_l[inx] *= -1
    new_l[inx+1] *= -1
    return new_l

[foo(L, i) for i in range(4)]

The output is:

[[-1, -2, 3, 4, 5], [1, -2, -3, 4, 5], [1, 2, -3, -4, 5], [1, 2, 3, -4, -5]]
Sign up to request clarification or add additional context in comments.

Comments

0

Try this:

L = [1, 2, 3, 4, 5]
L2 = []
print(L)

k = 2   #the number of items to be modified
for x in range(0, len(L)-k+1):
    N = L.copy()
    for y in range(x, x+k):
        N[y] *= -1
    L2.append(N)
    print(N)

You can change the k value if you want.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.