Re: Identical elements

• To: mathgroup at smc.vnet.net
• Subject: [mg88429] Re: Identical elements
• From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
• Date: Mon, 5 May 2008 06:13:10 -0400 (EDT)
• Organization: The Open University, Milton Keynes, UK
• References: <fvhe2h\$3th\$1@smc.vnet.net> <481C861E.8020808@gmail.com>

```Jean-Marc Gulliet wrote:

> KFUPM wrote:
>
>> I have a list  and i need to test whether all the elements in the list
>> are identical or no. What is the efficient way to do that? The output
>> should be true if all elements are the same and False otherwise. One
>> line command is preferred if possible.
>>
>> Your help is highly appreciated.
>
> A possible approach, thought you did precise neither the type of the
> elements of the list (numeric, symbolic, mixed,...) nor whether the list
> could contains some other lists, is the following. We test each
> remaining element of the list against the first element and return False
> as soon as an element differs from the first one.
>
>
> myCheck[lst_List] :=
>  Module[{fe = First@lst, status = True},
>   Scan[If[# != fe, Return[status = False]] &, Rest@lst]; status]
>
> myCheck[{1, 1, 1, 1}]
> myCheck[{1, 1, -1, 1}]
> myCheck[{{1, 2}, {1, 2}, {1, 2}, {1, 2}}]
> myCheck[{{1, 2}, {1, 2}, {-1, 2}, {1, 2}}]
>
> True
>
> False
>
> True
>
> False

A simpler and faster solution is to use *Equal* to test equality of the
list against itself slightly rotated. For instance,

In[1]:= lst = Join[{0.}, ConstantArray[1., {10^7}]];
Timing[lst == RotateLeft@lst]

Out[2]= {0.137857, False}

In[3]:= lst = Join[{1.}, ConstantArray[1., {10^7}]];
Timing[lst == RotateLeft@lst]

Out[4]= {0.191334, True}

Best regards,
-- Jean-Marc

```

• Prev by Date: Re: MenuView inside Manipulate
• Next by Date: Re: Wolfram Workbench user experiences
• Previous by thread: Re: Identical elements
• Next by thread: Re: Identical elements