1

I have an 2D array to do some calculation for each element, which in this format:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

My expected results is as follow after calculation:

a_new = [[2, 6, 3], [5, 12, 6], [8, 18, 9]]

I wrote the following codes:

f = 1
g = 2
a_1 = [c +f, (d+f)*g, e for (c, d, e) in array] #I expect this can bring the results to form the format I want.

However, it has the error message:

SyntaxError: invalid syntax

How to amend the code to get the results I wanted? And also I don't want to import and use NumPy for doing calculation.

3 Answers 3

1

Square brackets will do the job:

array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
f = 1
g = 2
a_1 = [[c +f, (d+f)*g, e] for (c, d, e) in array]

Results in:

a_1
[[2, 6, 3], [5, 12, 6], [8, 18, 9]]
Sign up to request clarification or add additional context in comments.

Comments

1

c +f, (d+f)*g, e define a tuple and you have no problem when doing:

my_tuple = c +f, (d+f)*g, e

but in the list comprehension syntax, you need to protect the tuple using parentheses to allow parsing, else python doesn't know when the argument stops:

a_1 = [(c +f, (d+f)*g, e) for (c, d, e) in a]

I get:

[(2, 6, 3), (5, 12, 6), (8, 18, 9)]

Note that your expected input shows lists, so maybe that is more that you want:

a_1 = [[c +f, (d+f)*g, e] for (c, d, e) in a]

Comments

0

if you want your resulting array to be a_new = [[2, 6, 3], [5, 12, 6], [8, 18, 9]] as stated in your question then you need to protect the inner operation in the list comprehension with square brackets.

a_new = [[c+f,(d+f)*g,e] for (c,d,e) in a]

You were getting an invalid syntax error because you needed to wrap c+f,(d+f)*g,e in square brackets for Python recognize the operation.

Some others have pointed out that you could also use parentheses instead of square brackets. While this won't result in an error, it will also not result in the array that you're looking for.

If you use square brackets you will get a list of lists:

[[2, 6, 3], [5, 12, 6], [8, 18, 9]]

If you use parentheses you will get a list of tuples:

[(2, 6, 3), (5, 12, 6), (8, 18, 9)]

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.