Re: Table constructed from two lists
- To: mathgroup at smc.vnet.net
- Subject: [mg123762] Re: Table constructed from two lists
- From: "Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com>
- Date: Sat, 17 Dec 2011 02:50:20 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jcf8dv$6us$1@smc.vnet.net>
On Fri, 16 Dec 2011 11:01:19 -0000, Alan Forrester <af17g11 at gmail.com>
wrote:
> Hello
>
> I'd like to construct a table by making each element of the table a
> function of elements of a couple of lists I have specified, but I'm
> getting an error message that seems not to make any sense.
>
> So I have a couple of lists, like these
> list1 = {1,2,3}
> list2 = {4,5,6}
>
> My code for the table I want to construct from those lists is a bit
> like this:
> Tplus = [list1[i]+list2[i], {i, Range[Length[list1]]}].
>
> The error I get claims that i is not an integer or a list of integers,
> but Range[Length[list1]] is a list of integers.
>
> I would appreciate any ideas on what I'm doing wrong.
>
> Alan Forrester
>
A bit like that, maybe, but not too much, since your example looks more
like a list comprehension as used in other languages (but not in
Mathematica).
Simply correcting the syntax, one could write
Tplus = Table[list1[[i]]+list2[[i]], {i, Range@Length[list1]}]
where double square brackets represent part indexing. But iterating over
the elements is not necessary since many functions in Mathematica are
automatically aware of tensor inputs (somewhat like APL). So instead one
can write:
Tplus = list1 + list2
or for that matter
Tcos = list1 Cos[list2]
Tpow = list1^list2
etc.
To find out whether a function can be used in this way, check to see if it
has the Attribute Listable:
MemberQ[Attributes[Plus], Listable] (* = True *)
MemberQ[Attributes[Times], Listable] (* = True *)
MemberQ[Attributes[Cos], Listable] (* = True *)
MemberQ[Attributes[Power], Listable] (* = True *)
and so forth.