MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: identical rows in tables

  • To: mathgroup at smc.vnet.net
  • Subject: [mg97610] Re: identical rows in tables
  • From: Szabolcs Horvát <szhorvat at gmail.com>
  • Date: Tue, 17 Mar 2009 04:57:10 -0500 (EST)
  • References: <gpl5qr$oss$1@smc.vnet.net>

King, Peter R wrote:
> I have a table of values
> 
> e.g.{{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, {1, 4, 2, 6, 3,
>   8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8, 6}, {1, 2,
>    4, 3, 6, 5, 8, 7}, {1, 2, 3, 4, 5, 6, 7, 8}}
> 
> and want to check if any rows are identical (so there are none in the above=
>  - I can remove last or first row which are supposed to be the same).
> 
> But in the following {{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, {=
> 1, 4, 2, 6, 3,
>   8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8, 6}, {1, 8,
>    7, 6, 5, 4, 3, 2}, {1, 8, 6, 7, 4, 5, 2, 3}, {1, 3, 2, 5, 4, 7, 6,
>   8}, {1, 3, 5, 2, 7, 4, 8, 6},....}
> 
>  there is a pair {1, 3, 2, 5, 4, 7, 6,
>   8}, {1, 3, 5, 2, 7, 4, 8, 6} which are the same.
> 
> In an ideal world when I print out (in say TableForm)  the repeated rows ca=
> n be printed in red (or some specified colour)
> 
> These rows are permutations if that makes any difference. The tables can be=
>  of any size (but always permutations of n numbers)
> 
> as a subsidiary question is there an easy way to convert the tables into nu=
> mbers (or strings) eg
> 
> {12345678,14628375,14263857 etc}
> 
> Alternatively is there an easy way to perform permutations on strings of ch=
> aracters?
> 
> Many thanks for your help to the multiple questions
> ps I am using Mathematica 6.03
> 

For simply checking whether there are any duplicates, one can use Union[].

table = {{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, {1, 4, 2,
      6, 3, 8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8,
     6}, {1, 2, 4, 3, 6, 5, 8, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 2, 3,
     4, 5, 6, 7, 8}};

Now compare Length@Union[table] and Length[table]

If you need to colour repeated elements, you can use Tally to identify them:

repeatedElements =
  Cases[Tally[table], {list_, multiplicity_} /; multiplicity > 1 :>
    list]

colorizeRules =
  MapIndexed[#1 -> Style[#1, Bold, ColorData[2][First[#2]]] &,
   repeatedElements]

table /. colorizeRules // ColumnForm

I hope this helps,
Szabolcs

P.S.  Conversion to strings is easy, but I don't think you can permute 
strings easily (without converting them back to lists first).

StringJoin[ToString /@ {1, 2, 3, 4, 5, 6, 7, 8}]

Convert back to a list of characters using Characters[]


  • Prev by Date: Re: identical rows in tables
  • Next by Date: Re: identical rows in tables
  • Previous by thread: Re: identical rows in tables
  • Next by thread: Using Mathematica notebooks in presentations?