I have the following list
bar = ['a','b','c','x','y','z']
What I want to do is to assign 1st, 4th and 5th values of bar
into v1,v2,v3
,
is there a more compact way to do than this:
v1, v2, v3 = [bar[0], bar[3], bar[4]]
Because in Perl you can do something like this:
my($v1, $v2, $v3) = @bar[0,3,4];
You can use operator.itemgetter
:
>>> from operator import itemgetter
>>> bar = ['a','b','c','x','y','z']
>>> itemgetter(0, 3, 4)(bar)
('a', 'x', 'y')
So for your example you would do the following:
>>> v1, v2, v3 = itemgetter(0, 3, 4)(bar)
Assuming that your indices are neither dynamic nor too large, I'd go with
bar = ['a','b','c','x','y','z']
v1, _, _, v2, v3, _ = bar
Since you want compactness, you can do it something as follows:
indices = (0,3,4)
v1, v2, v3 = [bar[i] for i in indices]
>>> print v1,v2,v3 #or print(v1,v2,v3) for python 3.x
a x y
In numpy
, you can index an array with another array that contains indices. This allows for very compact syntax, exactly as you want:
In [1]: import numpy as np
In [2]: bar = np.array(['a','b','c','x','y','z'])
In [3]: v1, v2, v3 = bar[[0, 3, 4]]
In [4]: print v1, v2, v3
a x y
Using numpy is most probably overkill for your simple case. I just mention it for completeness, in case you need to do the same with large amounts of data.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With