# Substituting multiple values

What is the best way of substituting a list (or vector or whatever) of values into an expression? For example, suppose I have

```
z = var('x y')
zvals = (1, 2)
w = x^2 + y^2
```

and want to substitute `zvals`

for `z`

in the expression `w`

. I have tried the following commands:

```
w.subs(z=zvals) #doesn't work
w.subs({z:zvals}) #doesn't work
w.subs(x=1,y=2) #fine, but cumbersome if z has many elements
w.subs(z[0]=zvals[0],z[1]=zvals[1]) #doesn't work
w.subs({z[0]:zvals[0],z[1]:zvals[1]}) #fine, and could turn this into a loop
#if there are many variables, but ugly
w.subs(dict(zip(z,zvals))) #best I can come up with
```

As far as I can see, none of this behaviour changes if `z`

and `zvals`

are vectors or lists instead of tuples.

Is there a simpler way of doing this? Also, why doesn't the fourth attempt work when the fifth one does - is this down to a limitation of Python?

EDIT: I also realised that you can do `w.subs(z[0]==zvals[0])`

but `w.subs(z[0]==zvals[0],z[1]==zvals[1])`

won't work - why is this?