Re: toy list processing problem: collect similar terms

2013-02-06 Thread Nick Mellor
You can just flatten the list using itertools and collate the results using 
defaultdict:

import itertools
from collections import defaultdict

sequence = 
((0,'a','b'),(1,'c','d'),(2,'e','f'),(3,'g','h'),(1,'i','j'),(2,'k','l'),(4,'m','n'),(2,'o','p'),(4,'q','r'),(5,'s','t'))

# flatten the list to (0,'a','b',1,'c','d'...
chain = itertools.chain.from_iterable(sequence)
# use defaultdict to set up the final list and deal with initial empty 
dictionary key
final_list = defaultdict(list)
for i in chain:
if isinstance(i, int):
number = i
else:
final_list[number].append(i)
print (final_list.items())

HTH,

Nick

On Sunday, September 26, 2010 2:05:13 PM UTC+10, Xah Lee wrote:
 here's a interesting toy list processing problem.
 
 I have a list of lists, where each sublist is labelled by
 a number. I need to collect together the contents of all sublists
 sharing
 the same label. So if I have the list
 
 ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 r) (5 s t))
 
 where the first element of each sublist is the label, I need to
 produce:
 
 output:
 ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
 
 a Mathematica solution is here:
 http://xahlee.org/UnixResource_dir/writ/notations_mma.html
 
 R5RS Scheme lisp solution:
 http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm
 by Sourav Mukherjee
 
 also, a Common Lisp solution can be found here:
 http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1ded8824bc750b?
 
 anyone care to give a solution in Python, Perl, javascript, or other
 lang? am guessing the scheme solution can be much improved... perhaps
 using some lib but that seems to show scheme is pretty weak if the lib
 is non-standard.
 
  Xah ∑ xahlee.org ☄
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2013-02-06 Thread Nick Mellor
Python 3 version:

from collections import defaultdict

data = 
((0,'a','b'),(1,'c','d'),(2,'e','f'),(3,'g','h'),(1,'i','j'),(2,'k','l'),(4,'m','n'),(2,'o','p'),(4,'q','r'),(5,'s','t'))

register = defaultdict(list)
for number, *letters in data:
register[number].extend(letters)
final = []
for i in sorted(register.keys()):
final.append(register[i])
print (final)

NB sorting is stable in Python, so sorted() will always keep the 1's, 2's etc 
in the same order as they were in the unsorted list.

Nick

On Sunday, 26 September 2010 14:05:13 UTC+10, Xah Lee  wrote:
 here's a interesting toy list processing problem.
 
 I have a list of lists, where each sublist is labelled by
 a number. I need to collect together the contents of all sublists
 sharing
 the same label. So if I have the list
 
 ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 r) (5 s t))
 
 where the first element of each sublist is the label, I need to
 produce:
 
 output:
 ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
 
 a Mathematica solution is here:
 http://xahlee.org/UnixResource_dir/writ/notations_mma.html
 
 R5RS Scheme lisp solution:
 http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm
 by Sourav Mukherjee
 
 also, a Common Lisp solution can be found here:
 http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1ded8824bc750b?
 
 anyone care to give a solution in Python, Perl, javascript, or other
 lang? am guessing the scheme solution can be much improved... perhaps
 using some lib but that seems to show scheme is pretty weak if the lib
 is non-standard.
 
  Xah ∑ xahlee.org ☄
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2013-02-06 Thread Nick Mellor
Oops! Not that sort stability is used in this algorithm. Was thinking of 
something else :-)

N

On Thursday, 7 February 2013 10:25:36 UTC+11, Nick Mellor  wrote:
 Python 3 version:
 
 
 
 from collections import defaultdict
 
 
 
 data = 
 ((0,'a','b'),(1,'c','d'),(2,'e','f'),(3,'g','h'),(1,'i','j'),(2,'k','l'),(4,'m','n'),(2,'o','p'),(4,'q','r'),(5,'s','t'))
 
 
 
 register = defaultdict(list)
 
 for number, *letters in data:
 
 register[number].extend(letters)
 
 final = []
 
 for i in sorted(register.keys()):
 
 final.append(register[i])
 
 print (final)
 
 
 
 NB sorting is stable in Python, so sorted() will always keep the 1's, 2's 
 etc in the same order as they were in the unsorted list.
 
 
 
 Nick
 
 
 
 On Sunday, 26 September 2010 14:05:13 UTC+10, Xah Lee  wrote:
 
  here's a interesting toy list processing problem.
 
  
 
  I have a list of lists, where each sublist is labelled by
 
  a number. I need to collect together the contents of all sublists
 
  sharing
 
  the same label. So if I have the list
 
  
 
  ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 
  r) (5 s t))
 
  
 
  where the first element of each sublist is the label, I need to
 
  produce:
 
  
 
  output:
 
  ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
 
  
 
  a Mathematica solution is here:
 
  http://xahlee.org/UnixResource_dir/writ/notations_mma.html
 
  
 
  R5RS Scheme lisp solution:
 
  http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm
 
  by Sourav Mukherjee
 
  
 
  also, a Common Lisp solution can be found here:
 
  http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1ded8824bc750b?
 
  
 
  anyone care to give a solution in Python, Perl, javascript, or other
 
  lang? am guessing the scheme solution can be much improved... perhaps
 
  using some lib but that seems to show scheme is pretty weak if the lib
 
  is non-standard.
 
  
 
   Xah ∑ xahlee.org ☄

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2011-02-16 Thread WJ
Xah Lee wrote:

 here's a interesting toy list processing problem.
 
 I have a list of lists, where each sublist is labelled by
 a number. I need to collect together the contents of all sublists
 sharing
 the same label. So if I have the list
 
 ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 r) (5 s t))
 
 where the first element of each sublist is the label, I need to
 produce:
 
 output:
 ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
 

Solving without hash-tables or group-by.

Using Guile:

First, sort the groups by the numbers.

(stable-sort groups (lambda(a b)( (car a) (car b

((0 a b) (1 c d) (1 i j) (2 e f) (2 k l) (2 o p) (3 g h)
 (4 m n) (4 q r) (5 s t))

Next, flatten the list.

(append-map identity step1)

(0 a b 1 c d 1 i j 2 e f 2 k l 2 o p 3 g h 4 m n 4 q r 5 s t)

Remove duplicate numbers.

(delete-duplicates step2)

(0 a b 1 c d i j 2 e f k l o p 3 g h 4 m n q r 5 s t)

We now need a very useful function called scan.

;; Yields sublists of contiguous items that satisfy func.
(define (scan func lst)
  (let ((tail (find-tail func lst)))
(if tail
  (cons (take-while func tail)
(scan func (drop-while func tail)))
  '(

(scan symbol? step3)

((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2011-02-10 Thread WJ
Pascal J. Bourguignon wrote:

 Xah Lee xah...@gmail.com writes:
 
 
  here's a interesting toy list processing problem.
  
  I have a list of lists, where each sublist is labelled by
  a number. I need to collect together the contents of all sublists
  sharing
  the same label. So if I have the list
  
  ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4
  q r) (5 s t))
  
  where the first element of each sublist is the label, I need to
  produce:
  
  output:
  ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
  
  a Mathematica solution is here:
  http://xahlee.org/UnixResource_dir/writ/notations_mma.html
  
  R5RS Scheme lisp solution:
  http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work
  _gmail.scm by Sourav Mukherjee
  
  also, a Common Lisp solution can be found here:
  http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1d
  ed8824bc750b?
 
 It's too complex. Just write:
 
 (let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) 
   (2 o p) (4 q r) (5 s t
 
   (mapcar (lambda (class) (reduce (function append) class :key
 (function rest)))
 (com.informatimago.common-lisp.list:equivalence-classes list :key
 (function first)))
 
)
 
 -- ((S T) (Q R M N) (G H) (O P K L E F) (I J C D) (A B))

Clojure:

(def groups '((0 a b)(1 c d)(2 e f)(3 g h)(1 i j)(2 k l)(4 m n)
(2 o p)(4 q r) (5 s t)))

Using group-by:

(map (fn[[k v]](flatten (map rest v))) (group-by first groups))

Using reduce:

(map #(flatten(rest %)) (reduce (fn[h [k  v]]
  (merge-with concat h {k v})) {} groups)) 

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-10-14 Thread Xah Lee

On Sep 25, 9:05 pm, Xah Lee xah...@gmail.com wrote:
 here's a interesting toy list processing problem.

 I have a list of lists, where each sublist is labelled by
 a number. I need to collect together the contents of all sublists
 sharing
 the same label. So if I have the list

 ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 r) (5 s t))

 where the first element of each sublist is the label, I need to
 produce:

 output:
 ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))
 ...

thanks all for many interesting solutions. I've been so busy in past
month on other computing issues and writing and never got around to
look at this thread. I think eventually i will, but for now just made
a link on my page to point to here.

now we have solutions in perl, python, ruby, common lisp, scheme lisp,
mathematica. I myself would also be interested in javascript perhps
i'll write one soon. If someone would go thru all these solution and
make a good summary with consistent format/names of each solution...
that'd be very useful i think. (and will learn a lot, which is how i
find this interesting)

PS here's a good site that does very useful comparisons for those
learning multiple langs.

* 〈Lisp: Common Lisp, Scheme, Clojure, Emacs Lisp〉
http://hyperpolyglot.wikidot.com/lisp
* 〈Scripting Languages: PHP, Perl, Python, Ruby, Smalltalk〉
http://hyperpolyglot.wikidot.com/scripting
* 〈Scripting Languages: Bash, Tcl, Lua, JavaScript, Io〉
http://hyperpolyglot.wikidot.com/small
* 〈Platform Languages: C, C++, Objective C, Java, C#〉
http://hyperpolyglot.wikidot.com/c
* 〈ML: Standard ML, OCaml, F#, Scala, Haskell〉 
http://hyperpolyglot.wikidot.com/ml

 Xah ∑ http://xahlee.org/ ☄
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-10-07 Thread sln
On Wed, 06 Oct 2010 10:52:19 -0700, s...@netherlands.com wrote:

On Sat, 25 Sep 2010 21:05:13 -0700 (PDT), Xah Lee xah...@gmail.com wrote:

here's a interesting toy list processing problem.

I have a list of lists, where each sublist is labelled by
a number. I need to collect together the contents of all sublists
sharing
the same label. So if I have the list

((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
r) (5 s t))

where the first element of each sublist is the label, I need to
produce:

output:
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

[snip]

anyone care to give a solution in Python, Perl, javascript, or other
lang? am guessing the scheme solution can be much improved... perhaps
using some lib but that seems to show scheme is pretty weak if the lib
is non-standard.


Crossposting to Lisp, Python and Perl because the weird list of lists looks
like Lisp or something else, and you mention other languages so I'm throwing
this out for Perl.

It appears this string you have there is actually list syntax in another 
language.
If it is, its the job of the language to parse the data out. Why then do you
want to put it into another language form? At runtime, once the data is in 
variables,
dictated by the syntax, you can do whatever data manipulation you want
(combining arrays, etc..).

So, in the spirit of a preprocessor, given that the text is balanced, with 
proper closure,
ie:   ( (data) (data) )is ok.
  ( data (data) )  is not ok.

the below does simple text manipulation, joining like labeled sublists, 
without going into
the runtime guts of internalizing the data itself. Internally, this is too 
simple.


If not preprocessor, then ...
The too simple, order independent, id independent, Perl approach.

-sln
-

use strict;
use warnings;
use Data::Dump 'dump';

my @inp = ([0,'a','b'],[1,'c','d'],[2,'e','f'],[3,'g','h'],
   [1,'i','j'],[2,'k','l'],[4,'m','n'],[2,'o','p'],
   [4,'q','r'],[5,'s','t']);

my ($cnt, @outp, %hs) = (0);

for my $ref (@inp) {
   $hs{ $$ref[0] } or $hs{ $$ref[0] } = $cnt++;
   push @{$outp[ $hs{ $$ref[0] } ] }, @{$ref}[ 1 .. $#{$ref} ];
}

dump @outp;

__END__

(
  [a, b],
  [c, d, i, j],
  [e, f, k, l, o, p],
  [g, h],
  [m, n, q, r],
  [s, t],
)

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-10-06 Thread sln
On Sat, 25 Sep 2010 21:05:13 -0700 (PDT), Xah Lee xah...@gmail.com wrote:

here's a interesting toy list processing problem.

I have a list of lists, where each sublist is labelled by
a number. I need to collect together the contents of all sublists
sharing
the same label. So if I have the list

((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
r) (5 s t))

where the first element of each sublist is the label, I need to
produce:

output:
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

[snip]

anyone care to give a solution in Python, Perl, javascript, or other
lang? am guessing the scheme solution can be much improved... perhaps
using some lib but that seems to show scheme is pretty weak if the lib
is non-standard.


Crossposting to Lisp, Python and Perl because the weird list of lists looks
like Lisp or something else, and you mention other languages so I'm throwing
this out for Perl.

It appears this string you have there is actually list syntax in another 
language.
If it is, its the job of the language to parse the data out. Why then do you
want to put it into another language form? At runtime, once the data is in 
variables,
dictated by the syntax, you can do whatever data manipulation you want
(combining arrays, etc..).

So, in the spirit of a preprocessor, given that the text is balanced, with 
proper closure,
ie:   ( (data) (data) )is ok.
  ( data (data) )  is not ok.

the below does simple text manipulation, joining like labeled sublists, without 
going into
the runtime guts of internalizing the data itself. Internally, this is too 
simple.

-sln
-
Alternate input:
(
  (
(0 a b) (1 c d) (2 e f )
  )
  (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q r) (5 s t)
)
--
use strict;
use warnings;

my $input = EOI;
((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q r)
 (5 s t))
EOI
my $output = $input;

my $regxout = qr/
  ( (?: \( \s* [^()]+ \s* \) (\s*) )+ )
/x;


$output =~ 
s{ $regxout }
 {
my ( $list, $format ) = ( $1, $2 );
my ( %hseen,
 @order,
 $replace
);
while ($list =~  /\(\s* (\S+) \s* (.+?) \s*\)/xsg) {
if ( exists $hseen{$1} ) {
$hseen{$1} .=  $2;
next;
}
push @order, $1;
$hseen{$1} = $2;
}
for my $id (@order) {
$replace .= ($hseen{$id}) ;
}
$replace =~ s/ $//;
$replace . $format
 }xeg;

print Input  -\n$input\n;
print Output -\n$output;

__END__

Input  -
((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q r)
 (5 s t))

Output -
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-30 Thread namekuseijin
On 29 set, 11:04, w_a_x_man w_a_x_...@yahoo.com wrote:
 On Sep 26, 9:24 am, p...@informatimago.com (Pascal J. Bourguignon)
 wrote:



  Xah Lee xah...@gmail.com writes:
   here's a interesting toy list processing problem.

   I have a list of lists, where each sublist is labelled by
   a number. I need to collect together the contents of all sublists
   sharing
   the same label. So if I have the list

   ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
   r) (5 s t))

   where the first element of each sublist is the label, I need to
   produce:

   output:
   ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

   a Mathematica solution is here:
  http://xahlee.org/UnixResource_dir/writ/notations_mma.html

   R5RS Scheme lisp solution:
  http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_...
   by Sourav Mukherjee

   also, a Common Lisp solution can be found here:
  http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1de...

  It's too complex. Just write:

  (let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n)
                (2 o p) (4 q r) (5 s t

    (mapcar (lambda (class) (reduce (function append) class :key (function 
  rest)))
             (com.informatimago.common-lisp.list:equivalence-classes list 
  :key (function first)))

     )

  -- ((S T) (Q R M N) (G H) (O P K L E F) (I J C D) (A B))

  --
  __Pascal Bourguignon__                    http://www.informatimago.com/

 Ruby:

 [[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
 'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q', 'r'],
 [5, 's', 't']].
 group_by{|x| x.first}.values.map{|x| x.map{|y| y[1..-1]}.flatten}

     ==[[s, t], [a, b], [c, d, i, j],
  [e, f, k, l, o, p],
  [g, h], [m, n, q, r]]

cool, it comes with order all fucked up.  This is something I was
criticized for before, though not all that important to most
functional processing.  Not the case here, though.

here's a scheme version that is hopefully better than the given one:

(define (dig in)

  (if (null? in) '()

(let* ((n (first-of-first in))

   (all-n (filter in (lambda (x)  (eq? n (first x)

   (all-but-n (filter in (lambda (x) (not (eq? n (first
x)))

   (pair

  (fold all-n
 (lambda (i o) (pair (second i) (pair (third i) o

  (dig all-but-n)


; given these aliases to lisp n00bs

(define pair cons)

(define first car)

(define rest cdr)

(define first-of-first caar)

(define second cadr)

(define third caddr)


; and these well-known functions
 (non-tail-recursive for benefit of n00bs)
(define (fold ls f) ; AKA reduce

  (if (null? ls) '()

  (f (first ls) (fold (rest ls) f


(define (filter ls f)

  (fold ls (lambda (i o) (if (f i) (pair i o) o



; testing
(let ((in '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n)
(2 o p) (4 q r) (5 s t
  (display (dig in))
  (newline))

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-30 Thread namekuseijin
On 30 set, 09:35, namekuseijin namekusei...@gmail.com wrote:
 On 29 set, 11:04, w_a_x_man w_a_x_...@yahoo.com wrote:



  On Sep 26, 9:24 am, p...@informatimago.com (Pascal J. Bourguignon)
  wrote:

   Xah Lee xah...@gmail.com writes:
here's a interesting toy list processing problem.

I have a list of lists, where each sublist is labelled by
a number. I need to collect together the contents of all sublists
sharing
the same label. So if I have the list

((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
r) (5 s t))

where the first element of each sublist is the label, I need to
produce:

output:
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

a Mathematica solution is here:
   http://xahlee.org/UnixResource_dir/writ/notations_mma.html

R5RS Scheme lisp solution:
   http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_...
by Sourav Mukherjee

also, a Common Lisp solution can be found here:
   http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1de...

   It's too complex. Just write:

   (let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n)
                 (2 o p) (4 q r) (5 s t

     (mapcar (lambda (class) (reduce (function append) class :key (function 
   rest)))
              (com.informatimago.common-lisp.list:equivalence-classes list 
   :key (function first)))

      )

   -- ((S T) (Q R M N) (G H) (O P K L E F) (I J C D) (A B))

   --
   __Pascal Bourguignon__                    http://www.informatimago.com/

  Ruby:

  [[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
  'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q', 'r'],
  [5, 's', 't']].
  group_by{|x| x.first}.values.map{|x| x.map{|y| y[1..-1]}.flatten}

      ==[[s, t], [a, b], [c, d, i, j],
   [e, f, k, l, o, p],
   [g, h], [m, n, q, r]]

 cool, it comes with order all fucked up.  This is something I was
 criticized for before, though not all that important to most
 functional processing.  Not the case here, though.

 here's a scheme version that is hopefully better than the given one:

(define (dig in)
  (if (null? in) '()
    (let* ((n         (first-of-first in))
           (all-n     (filter in (lambda (x)      (eq? n (first x)
           (all-but-n (filter in (lambda (x) (not (eq? n (first
x)))
       (pair
          (fold all-n
             (lambda (i o) (pair (second i) (pair (third i) o
          (dig all-but-n)

; given these aliases to lisp n00bs
(define pair cons)
(define first car)
(define rest cdr)
(define first-of-first caar)
(define second cadr)
(define third caddr)

; and these well-known functions (non-tail-recursive for benefit of
n00bs)
(define (fold ls f) ; AKA reduce
  (if (null? ls) '()
      (f (first ls) (fold (rest ls) f
(define (filter ls f)
  (fold ls (lambda (i o) (if (f i) (pair i o) o

; testing
(let ((in '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n)
            (2 o p) (4 q r) (5 s t
  (display (dig in))
  (newline))

;frakkin text editor...
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-29 Thread w_a_x_man
On Sep 26, 9:24 am, p...@informatimago.com (Pascal J. Bourguignon)
wrote:
 Xah Lee xah...@gmail.com writes:
  here's a interesting toy list processing problem.

  I have a list of lists, where each sublist is labelled by
  a number. I need to collect together the contents of all sublists
  sharing
  the same label. So if I have the list

  ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
  r) (5 s t))

  where the first element of each sublist is the label, I need to
  produce:

  output:
  ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

  a Mathematica solution is here:
 http://xahlee.org/UnixResource_dir/writ/notations_mma.html

  R5RS Scheme lisp solution:
 http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_...
  by Sourav Mukherjee

  also, a Common Lisp solution can be found here:
 http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1de...

 It's too complex. Just write:

 (let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n)
               (2 o p) (4 q r) (5 s t

   (mapcar (lambda (class) (reduce (function append) class :key (function 
 rest)))
            (com.informatimago.common-lisp.list:equivalence-classes list :key 
 (function first)))

    )

 -- ((S T) (Q R M N) (G H) (O P K L E F) (I J C D) (A B))

 --
 __Pascal Bourguignon__                    http://www.informatimago.com/

Ruby:

[[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q', 'r'],
[5, 's', 't']].
group_by{|x| x.first}.values.map{|x| x.map{|y| y[1..-1]}.flatten}

==[[s, t], [a, b], [c, d, i, j],
 [e, f, k, l, o, p],
 [g, h], [m, n, q, r]]
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-28 Thread Xah Lee
On Sep 27, 9:34 pm, John Bokma j...@castleamber.com wrote:
 Seebs usenet-nos...@seebs.net writes:

 fup set to poster

  On 2010-09-28, John Bokma j...@castleamber.com wrote:
  Seebs usenet-nos...@seebs.net writes:
  On 2010-09-26, J?rgen Exner jurge...@hotmail.com wrote:
  It was livibetter who without any motivation or reasoning posted Python
  code in CLPM.

  Not exactly; he posted it in a crossposted thread, which happened to 
  include
  CLPM and other groups, including comp.lang.python.

  It is quite possible that he didn't know about the crossposting.

  Oh, he does. It has been Xah's game for years.

  But did livibetter know about it?  I wasn't defending Xah, who is indeed
  at the very least clueless and disruptive.

 Heh, he's not clueless, the problem is that he knows exactly what he's
 doing. And like most spammers, very hard to get rid off.

  But I was sort of defending
  the poster who was accused of posting Python code in CLPM, because that
  poster may not have understood the game.

 Ah, clear. Well, the problem is somewhat also in CLPM where people
 somehow have to reply to messages like this :-(. And I am sure Xah
 laughes his ass off each time it happens.

Hi John Bokma,

can you stop this?

doesn't seems fruitful to keep on this.

if you don't like my posts, ignore them? i don't post in
comp.lang.python or comp.lang.perl.misc that often... maybe have done
so 5 times this year.

i visited your home page
http://johnbokma.com/mexit/2010/08/15/
and there are really a lot beautiful photos.

this isn't bribery or something like that. I've been annoyed by you,
of course, but it's not fruitful to keep going on this.

Best,

 Xah ∑ xahlee.org ☄
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-28 Thread John Bokma
Xah Lee xah...@gmail.com writes:

 can you stop this?

Can you stop crossposting? And if there is really, really a need to
crosspost, can you please set the follow-up to?

 doesn't seems fruitful to keep on this.

 if you don't like my posts, ignore them? i don't post in
 comp.lang.python or comp.lang.perl.misc that often... maybe have done
 so 5 times this year.

Which is enough to disrupt those groups for days.

 i visited your home page
 http://johnbokma.com/mexit/2010/08/15/
 and there are really a lot beautiful photos.

Thanks Xah. Like I wrote, your site /does/ have good information, it's
so sad that you somehow think it's necessary to spam Usenet to get
visitors. Or maybe you've another reason, don't know. But it /is/ Usenet
abuse.

 this isn't bribery or something like that. I've been annoyed by you,
 of course, but it's not fruitful to keep going on this.

Well, you annoy me, I annoy you. It's in your hands to make it stop.

My advice is:

 1) remove all the excessive swearing from your site. If you have a
point, you don't need it. Your argument(s) without the swearing
should speak for themselves

 2) Stop abusing Usenet. Instead focus on writing more good stuff on
your site.

1)  2) will keep me from linking to your site, ever. And I am sure I am
not alone in this.

-- 
John Bokma   j3b

Blog: http://johnbokma.com/Facebook: http://www.facebook.com/j.j.j.bokma
Freelance Perl  Python Development: http://castleamber.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-28 Thread Paul Rubin
John Bokma j...@castleamber.com writes:
 Xah Lee xah...@gmail.com writes: ...
 Can you stop crossposting? 

John, can you ALSO stop crossposting? 
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-28 Thread John Bokma
Paul Rubin no.em...@nospam.invalid writes:

 John Bokma j...@castleamber.com writes:
 Xah Lee xah...@gmail.com writes: ...
 Can you stop crossposting? 

 John, can you ALSO stop crossposting? 

Since the issue is on-topic in all groups: no. I did set a follow-up
header, which you ignored and on top of that redirected the thing to
comp.lang.python. So:

Paul, can you ALSO stop acting like a complete ass?

-- 
John Bokma   j3b

Blog: http://johnbokma.com/Facebook: http://www.facebook.com/j.j.j.bokma
Freelance Perl  Python Development: http://castleamber.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


reduced-tagged (was Re: toy list processing problem: collect similar terms)

2010-09-27 Thread Mirko
On Sep 26, 12:05 am, Xah Lee xah...@gmail.com wrote:

I am hijacking the following post and driving it to Cuba (the Monthy
Python fans will know what I refer to).  I want to create a `reduce'-
like function that can handle similar problems.

Xah said:
 here's a interesting toy list processing problem.

 I have a list of lists, where each sublist is labelled by
 a number. I need to collect together the contents of all sublists
 sharing
 the same label. So if I have the list

 ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 r) (5 s t))

 where the first element of each sublist is the label, I need to
 produce:

 output:
 ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

 stuffed deleted.

Here is my Common Lisp (and I only care about Common Lisp answers)
attempt to create a `reduce'-like function to handle this kind of a
problem (you will see that I am still struggling with the code and the
documentation).

(defun reduce-tagged (function sequence key
 (key-tag #'first)
 (key-datum #'rest))
  Use a binary operation, `function' to combine a sequence of tagged
elements.  like-tagged elements are `reduce'd according to `function'
and returned in a list ...

`sequence' is a sequence of tagged elements.  reduce-m will reduce
like-tagged-elements.

If `key-tag' is supplied it is used to extract the element tag.  If
`key-tag' is not supplied, the function `first' is used.

If `key-datum' is supplied, it is used to extract the element datum.
If `key-datum' is not supplied, the function `rest' is used.


  (let ((hash (make-hash-table)))
(dolist (datum sequence)
  (let ((tag (funcall key-tag datum))
(values (funcall key-datum datum)))
(multiple-value-bind (it present)
(gethash tag hash)
  (if present
  (setf (gethash tag hash)
(apply function (gethash tag hash) values))
  (setf (gethash tag hash) values)
(let (result)
  (dohash (key value hash)
(push (list key value) result))
  result)))

Comments, improvements?  I am looking for a general purpose function
like reduce that I
can apply in various situations.

Thanks,

Mirko
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: reduce-tagged (was Re: toy list processing problem: collect similar terms)

2010-09-27 Thread Mirko
On Sep 27, 11:18 am, Mirko mirko.vuko...@gmail.com wrote:
 On Sep 26, 12:05 am, Xah Lee xah...@gmail.com wrote:

 I am hijacking the following post and driving it to Cuba (the Monthy
 Python fans will know what I refer to).  I want to create a `reduce'-
 like function that can handle similar problems.

 Xah said:



  here's a interesting toy list processing problem.

  I have a list of lists, where each sublist is labelled by
  a number. I need to collect together the contents of all sublists
  sharing
  the same label. So if I have the list

  ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
  r) (5 s t))

  where the first element of each sublist is the label, I need to
  produce:

  output:
  ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

  stuffed deleted.

 Here is my Common Lisp (and I only care about Common Lisp answers)
 attempt to create a `reduce'-like function to handle this kind of a
 problem (you will see that I am still struggling with the code and the
 documentation).

 (defun reduce-tagged (function sequence key
                  (key-tag #'first)
                  (key-datum #'rest))
   Use a binary operation, `function' to combine a sequence of tagged
 elements.  like-tagged elements are `reduce'd according to `function'
 and returned in a list ...

 `sequence' is a sequence of tagged elements.  reduce-m will reduce
 like-tagged-elements.

 If `key-tag' is supplied it is used to extract the element tag.  If
 `key-tag' is not supplied, the function `first' is used.

 If `key-datum' is supplied, it is used to extract the element datum.
 If `key-datum' is not supplied, the function `rest' is used.

 
   (let ((hash (make-hash-table)))
     (dolist (datum sequence)
       (let ((tag (funcall key-tag datum))
             (values (funcall key-datum datum)))
         (multiple-value-bind (it present)
             (gethash tag hash)
           (if present
               (setf (gethash tag hash)
                     (apply function (gethash tag hash) values))
               (setf (gethash tag hash) values)
     (let (result)
       (dohash (key value hash)
         (push (list key value) result))
       result)))

 Comments, improvements?  I am looking for a general purpose function
 like reduce that I
 can apply in various situations.

 Thanks,

 Mirko

Correction: the previous code used a non-portable clisp macro
`dohash' (looks nice, doesn't it?)

Here is the version with maphash:

(defun reduce-tagged (function sequence key
 (key-tag #'first)
 (key-datum #'rest))
  Use a binary operation, `function' to combine a sequence of tagged
elements.  like-tagged elements are `reduce'd according to `function'

`sequence' is a sequence of tagged elements.  reduce-m will reduce
like-tagged-elements.

If `key-tag' is supplied it is used to extract the element tag.  If
`key-tag' is not supplied, the function `first' is used.

If `key-datum' is supplied, it is used to extract the element datum.
If `key-datum' is not supplied, the function `rest' is used.


  (let ((hash (make-hash-table)))
(dolist (datum sequence)
  (let ((tag (funcall key-tag datum))
(values (funcall key-datum datum)))
(multiple-value-bind (it present)
(gethash tag hash)
  (declare (ignore it))
  (if present
  (setf (gethash tag hash)
(apply function (gethash tag hash) values))
  (setf (gethash tag hash) values)
(let (result)
  (maphash #'(lambda(key value)
   (push (list key value) result))
   hash)
  result)))

Mirko
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: reduce-tagged (was Re: toy list processing problem: collect similar terms)

2010-09-27 Thread Mirko
On Sep 27, 11:40 am, Mirko mirko.vuko...@gmail.com wrote:
 On Sep 27, 11:18 am, Mirko mirko.vuko...@gmail.com wrote:



  On Sep 26, 12:05 am, Xah Lee xah...@gmail.com wrote:

  I am hijacking the following post and driving it to Cuba (the Monthy
  Python fans will know what I refer to).  I want to create a `reduce'-
  like function that can handle similar problems.

  Xah said:

   here's a interesting toy list processing problem.

   I have a list of lists, where each sublist is labelled by
   a number. I need to collect together the contents of all sublists
   sharing
   the same label. So if I have the list

   ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
   r) (5 s t))

   where the first element of each sublist is the label, I need to
   produce:

   output:
   ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

   stuffed deleted.

  Here is my Common Lisp (and I only care about Common Lisp answers)
  attempt to create a `reduce'-like function to handle this kind of a
  problem (you will see that I am still struggling with the code and the
  documentation).

 ... faulty code deleted

Aaand one more fix (apply - funcall)  (This version at least produces
a close
facsimile of the desired output)

(defun reduce-tagged (function sequence key
 (key-tag #'first)
 (key-datum #'rest))
  Use a binary operation, `function' to combine a sequence of tagged
elements.  like-tagged elements are `reduce'd according to `function'

`sequence' is a sequence of tagged elements.  reduce-m will reduce
like-tagged-elements.

If `key-tag' is supplied it is used to extract the element tag.  If
`key-tag' is not supplied, the function `first' is used.

If `key-datum' is supplied, it is used to extract the element datum.
If `key-datum' is not supplied, the function `rest' is used.


  (let ((hash (make-hash-table)))
(dolist (datum sequence)
  (let ((tag (funcall key-tag datum))
(values (funcall key-datum datum)))
(multiple-value-bind (it present)
(gethash tag hash)
  (declare (ignore it))
  (if present
  (setf (gethash tag hash)
(funcall function (gethash tag hash) values))
  (setf (gethash tag hash) values)
(let (result)
  (maphash #'(lambda(key value)
   (push (list key value) result))
   hash)
  result)))
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-27 Thread ccc31807
On Sep 26, 12:05 am, Xah Lee xah...@gmail.com wrote:
 here's a interesting toy list processing problem.

 I have a list of lists, where each sublist is labelled by
 a number. I need to collect together the contents of all sublists
 sharing
 the same label. So if I have the list

 ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 r) (5 s t))

 where the first element of each sublist is the label, I need to
 produce:

 output:
 ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

Here is a solution in Perl -- the verbose version. Please see my note
below.

SCRIPT:
use strict;
use warnings;
my %lists;

while (DATA)
{
chomp;
my ($k, @v) = split(/ /, $_);
push(@{$lists{$k}}, @v);
}

foreach my $k (sort keys %lists)
{
print $k - @{$lists{$k}}\n;
}

exit(0);

__DATA__
0 a b
1 c d
2 e f
3 g h
1 i j
2 k l
4 m n
2 o p
4 q r
5 s t

OUTPUT:
perl lists.plx
0 - a b
1 - c d i j
2 - e f k l o p
3 - g h
4 - m n q r
5 - s t

NOTE:
I assume that you want an idiomatic solution for the language. I have
therefore converted your data into a typical record oriented
structure. Perlistas don't use parenthesis. If you want a Lispy
solution, use Lisp. Further, Perl was made for exactly this kind of
problem, which is simple data munging, taking some input, transforming
it, and printing it out -- Practical Extraction and Reporting
Language. I know that some Lispers (R.G., are you reading?) will
object to a formulation like this: @{$lists{$k}}, but all this says
(in Perl) is to spit out the value contained in the hash element
$lists{$k} as an array, and is good idiomatic Perl, even if some
Lispers aren't quite up to the task of understanding it.

CC.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: reduced-tagged (was Re: toy list processing problem: collect similar terms)

2010-09-27 Thread Steven D'Aprano
On Mon, 27 Sep 2010 08:18:22 -0700, Mirko wrote:

 Here is my Common Lisp (and I only care about Common Lisp answers)

Good for you. So why are you spamming other newsgroups with your CL 
solution? Not once, but three times.

Replies to /dev/null.

-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-27 Thread Seebs
On 2010-09-26, Xah Lee xah...@gmail.com wrote:
 On Sep 25, 11:17??pm, Paul Rubin no.em...@nospam.invalid wrote:
 Python solution follows (earlier one with an error cancelled). ??All
 crossposting removed since crossposting is a standard trolling tactic.

 btw, i disagree about your remark on crossposting.

You're wrong.  Crossposting is indeed a standard trolling tactic.

This does not prove that all crossposters are trolls, nor does it assert
that all crossposters are trolls, but it is absolutely factually correct
that it's a standard trolling tactic.

-s
-- 
Copyright 2010, all wrongs reversed.  Peter Seebach / usenet-nos...@seebs.net
http://www.seebs.net/log/ -- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) -- get educated!
I am not speaking for my employer, although they do rent some of my opinions.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-27 Thread Seebs
On 2010-09-26, J?rgen Exner jurge...@hotmail.com wrote:
 It was livibetter who without any motivation or reasoning posted Python
 code in CLPM.

Not exactly; he posted it in a crossposted thread, which happened to include
CLPM and other groups, including comp.lang.python.

It is quite possible that he didn't know about the crossposting.  However,
while I would agree that this would constitute a form of ignorance, I'd think
that, especially with how well some newsreading interfaces hide that detail,
I don't think it's really worth getting angry over.

-s
-- 
Copyright 2010, all wrongs reversed.  Peter Seebach / usenet-nos...@seebs.net
http://www.seebs.net/log/ -- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) -- get educated!
I am not speaking for my employer, although they do rent some of my opinions.
-- 
http://mail.python.org/mailman/listinfo/python-list


How to Deal with Xah Lee Spam/Abuse (was: toy list processing problem: collect similar terms)

2010-09-27 Thread John Bokma
Seebs usenet-nos...@seebs.net writes:

 On 2010-09-26, Xah Lee xah...@gmail.com wrote:
 On Sep 25, 11:17??pm, Paul Rubin no.em...@nospam.invalid wrote:
 Python solution follows (earlier one with an error cancelled). ??All
 crossposting removed since crossposting is a standard trolling tactic.

 btw, i disagree about your remark on crossposting.

 You're wrong.

FYI: Xah Lee is well known for his abuse of cross posting. Be happy that
Google Groups limits the number of groups to crosspost to five.

Related: his spamming behaviour has already resulted in Xah Lee
having to look for another hosting provider [1]. Currently 1and1 provides
him shelter, most likely carefully selected by Xah (as Google Groups)
since 1and1 is not known for their spam fighting reputation nor clue.

But one can only hope, so if you want to do something about this Xah
thing, please report it with 1and1 and ab...@google.com. He won't learn
respect from it, but maybe you end up being honored [2] on his
collection of drivel [3].

In short:

 = don't reply to Xah Lee: at best it's a waste of time
 = if his post is abusive (crossposting to 5 groups just because you can
   is) report it with /and/ his hosting provider (since most of his
   posts are copy paste jobs of articles on his site just to drive
   traffic) and Google Groups (his Usenet provider of choice since they
   hardly do a thing about spam).


[1] http://www.mail-archive.com/python-list@python.org/msg91631.html
[2] http://www.google.com/search?q=site%3Axahlee.org%20bokma
[3] What's sad is that some of its stuff is actually good/not bad. 
But tainted: Xah Lee is a spammer and a Usenet abuser.

-- 
John Bokma   j3b

Blog: http://johnbokma.com/Facebook: http://www.facebook.com/j.j.j.bokma
Freelance Perl  Python Development: http://castleamber.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-27 Thread John Bokma
Seebs usenet-nos...@seebs.net writes:

 On 2010-09-26, J?rgen Exner jurge...@hotmail.com wrote:
 It was livibetter who without any motivation or reasoning posted Python
 code in CLPM.

 Not exactly; he posted it in a crossposted thread, which happened to include
 CLPM and other groups, including comp.lang.python.

 It is quite possible that he didn't know about the crossposting.

Oh, he does. It has been Xah's game for years.

 while I would agree that this would constitute a form of ignorance, I'd think
 that, especially with how well some newsreading interfaces hide that detail,
 I don't think it's really worth getting angry over.

You think wrong. And Jurgen should have known better than to reply several
times (but like too many people in cplm he posts for posting's sake, the
main reason why I don't follow that group anymore).

Xah has been doing this for many years and most of his posts are just
made to drive traffic to his site (hence they are copy paste of articles
on his site + link(s) to his site). It's Usenet abuse, on purpose.

The reason it pisses off people is that nearly weekly it causes a lot of
noise in newsgroups that are really better off without the noise
(IMNSHO).

See my other post on how to deal with this spammer. If you've missed it:
report him for spamming, since that's what he does. It already made him
have to move hosting providers once. While it's not going to stop him,
it will cost him money. See:
http://www.google.com/search?q=site%3Axahlee.org%20bokma

While I am named in that article be assured that I was not the only one
contacting dreamhost (+10 for doing this, btw). Quite some people
contacted me via email that they also talked with Dreamhost. Just keep
reporting this spammer, and maybe 1and1 will kick it out.

-- 
John Bokma   j3b

Blog: http://johnbokma.com/Facebook: http://www.facebook.com/j.j.j.bokma
Freelance Perl  Python Development: http://castleamber.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-27 Thread Seebs
On 2010-09-28, John Bokma j...@castleamber.com wrote:
 Seebs usenet-nos...@seebs.net writes:
 On 2010-09-26, J?rgen Exner jurge...@hotmail.com wrote:
 It was livibetter who without any motivation or reasoning posted Python
 code in CLPM.

 Not exactly; he posted it in a crossposted thread, which happened to include
 CLPM and other groups, including comp.lang.python.

 It is quite possible that he didn't know about the crossposting.

 Oh, he does. It has been Xah's game for years.

But did livibetter know about it?  I wasn't defending Xah, who is indeed
at the very least clueless and disruptive.  But I was sort of defending
the poster who was accused of posting Python code in CLPM, because that
poster may not have understood the game.

-s
-- 
Copyright 2010, all wrongs reversed.  Peter Seebach / usenet-nos...@seebs.net
http://www.seebs.net/log/ -- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) -- get educated!
I am not speaking for my employer, although they do rent some of my opinions.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-27 Thread John Bokma
Seebs usenet-nos...@seebs.net writes:

fup set to poster

 On 2010-09-28, John Bokma j...@castleamber.com wrote:
 Seebs usenet-nos...@seebs.net writes:
 On 2010-09-26, J?rgen Exner jurge...@hotmail.com wrote:
 It was livibetter who without any motivation or reasoning posted Python
 code in CLPM.

 Not exactly; he posted it in a crossposted thread, which happened to include
 CLPM and other groups, including comp.lang.python.

 It is quite possible that he didn't know about the crossposting.

 Oh, he does. It has been Xah's game for years.

 But did livibetter know about it?  I wasn't defending Xah, who is indeed
 at the very least clueless and disruptive.

Heh, he's not clueless, the problem is that he knows exactly what he's
doing. And like most spammers, very hard to get rid off.

 But I was sort of defending
 the poster who was accused of posting Python code in CLPM, because that
 poster may not have understood the game.

Ah, clear. Well, the problem is somewhat also in CLPM where people
somehow have to reply to messages like this :-(. And I am sure Xah
laughes his ass off each time it happens.

-- 
John Bokma   j3b

Blog: http://johnbokma.com/Facebook: http://www.facebook.com/j.j.j.bokma
Freelance Perl  Python Development: http://castleamber.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Paul Rubin
Python solution follows (earlier one with an error cancelled).  All
crossposting removed since crossposting is a standard trolling tactic.

from collections import defaultdict

def collect(xss):
d = defaultdict(list)
for xs in xss:
d[xs[0]].extend(xs[1:])
return list(v for k,v in sorted(d.items()))

y = [[0,'a','b'], [1,'c','d'], [2,'e','f'], [3,'g','h'], [1,'i','j'],
 [2,'k','l'], [4,'m','n'], [2,'o','p'], [4,'q','r'], [5,'s','t']]

print collect(y)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread livibetter
Here is mine for Python:

l = [[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q', 'r'],
[5, 's', 't']]
d = {}
for idx, items in [(e[0], e[1:]) for e in l]: d[idx] = d[idx] + items
if idx in d else items
print d.values()

Output:
[['a', 'b'], ['c', 'd', 'i', 'j'], ['e', 'f', 'k', 'l', 'o', 'p'],
['g', 'h'], ['m', 'n', 'q', 'r'], ['s', 't']]
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Arnaud Delobelle
On 26 Sep, 08:47, livibetter livibet...@gmail.com wrote:
 Here is mine for Python:

 l = [[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
 'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q', 'r'],
 [5, 's', 't']]
 d = {}
 for idx, items in [(e[0], e[1:]) for e in l]: d[idx] = d[idx] + items
 if idx in d else items
 print d.values()

 Output:
 [['a', 'b'], ['c', 'd', 'i', 'j'], ['e', 'f', 'k', 'l', 'o', 'p'],
 ['g', 'h'], ['m', 'n', 'q', 'r'], ['s', 't']]

from itertools import groupby
from operator import itemgetter

l = [[0, 'a', 'b'], [1, 'c', 'd'], [2, 'e', 'f'], [3, 'g', 'h'], [1,
'i', 'j'], [2, 'k', 'l'], [4, 'm', 'n'], [2, 'o', 'p'], [4, 'q',
'r'],
[5, 's', 't']]

[
[x for g in gs for x in g[1:]]
for _, gs in groupby(sorted(l), itemgetter(0))
]

--
Arnaud
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Dr.Ruud

On 2010-09-26 06:05, Xah Lee wrote:


I have a list of lists, where each sublist is labelled by
a number. I need to collect together the contents of all sublists
sharing the same label. So if I have the list

((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q r) (5 s 
t))

where the first element of each sublist is the label, I need to
produce:

output:
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))


The input is a string on STDIN,
and the output is a string on STDOUT?


Use a hash:

perl -MData::Dumper -wle '$Data::Dumper::Sortkeys = 1;
  my $t = ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j)
.  (2 k l) (4 m n) (2 o p) (4 q r) (5 s t));

  push @{ $h{ $1 } }, $2 while $t =~ /(\w+)([^)]*)/g;  # gist

  print Dumper \%h;
'

or an array:

perl -wle '
  my $t = ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j)
.  (2 k l) (4 m n) (2 o p) (4 q r) (5 s t));

  push @{$a[$1]},$2 while $t =~ /(\w+)\s+([^)]*)/g; # gist.1
  print ((.join() (,map join( ,@$_),@a ).));  # gist.2
'


Or if the list is not just a string, but a real data structure in the 
script:


perl -wle'
  my $t = [ [qw/0 a b/], [qw/1 c d/], [qw/2 e f/], [qw/3 g h/],
[qw/1 i j/], [qw/2 k l/], [qw/4 m n/], [qw/2 o p/],
[qw/4 q r/], [qw/5 s t/] ];

  push @{ $a[ $_-[0] ] }, [ @$_[ 1, 2 ] ] for @$t;  # AoAoA

  printf ((%s))\n, join ) (,
   map join(  ,
 map join(  , @$_ ), @$_
   ), @a;
'

Etc.

--
Ruud

--
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Pascal J. Bourguignon
Xah Lee xah...@gmail.com writes:


 here's a interesting toy list processing problem.

 I have a list of lists, where each sublist is labelled by
 a number. I need to collect together the contents of all sublists
 sharing
 the same label. So if I have the list

 ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 r) (5 s t))

 where the first element of each sublist is the label, I need to
 produce:

 output:
 ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

 a Mathematica solution is here:
 http://xahlee.org/UnixResource_dir/writ/notations_mma.html

 R5RS Scheme lisp solution:
 http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm
 by Sourav Mukherjee

 also, a Common Lisp solution can be found here:
 http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1ded8824bc750b?

It's too complex. Just write:

(let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) 
  (2 o p) (4 q r) (5 s t

  (mapcar (lambda (class) (reduce (function append) class :key (function rest)))
   (com.informatimago.common-lisp.list:equivalence-classes list :key 
(function first)))

   )

-- ((S T) (Q R M N) (G H) (O P K L E F) (I J C D) (A B))


-- 
__Pascal Bourguignon__ http://www.informatimago.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Sherm Pendley
Jürgen Exner jurge...@hotmail.com writes:

 Alexander Burger a...@software-lab.de wrote:
In PicoLisp:

 What the f does PicoLisp have to with Perl?

It's Xah. He cross-posts in an attempt to start a language feud.

Please don't feed the troll.

sherm--

-- 
Sherm Pendley
   http://camelbones.sourceforge.net
Cocoa Developer
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Sherm Pendley
Jürgen Exner jurge...@hotmail.com writes:

 livibetter livibet...@gmail.com wrote:
Here is mine for Python:

 What the f*** does Python have to do with Perl?

Xah is a cross-posting troll. Please don't feed the troll.

sherm--

-- 
Sherm Pendley
   http://camelbones.sourceforge.net
Cocoa Developer
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Ben Morrow

Quoth p...@informatimago.com (Pascal J. Bourguignon):
 
 It's too complex. Just write:
 
 (let ((list '((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) 
   (2 o p) (4 q r) (5 s t

Unless you're going to talk about Perl, please take clpmisc out of the
xpost.

Ben

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread John Bokma
Jürgen Exner jurge...@hotmail.com writes:

 livibetter livibet...@gmail.com wrote:
Here is mine for Python:

 What the f*** does Python have to do with Perl?

Clueless fuck. I unsubscribed from comp.lang.perl.misc to avoid the
retards like you and now you come in via the backdoor. If you have a
problem with Xah report him with Google Groups and with his hosting
provider 11 like I do. Dreamhost kicked him out that way.

-- 
John Bokma   j3b

Blog: http://johnbokma.com/Facebook: http://www.facebook.com/j.j.j.bokma
Freelance Perl  Python Development: http://castleamber.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Xah Lee
2010-09-26

On Sep 25, 11:17 pm, Paul Rubin no.em...@nospam.invalid wrote:
 Python solution follows (earlier one with an error cancelled).  All
 crossposting removed since crossposting is a standard trolling tactic.

     from collections import defaultdict

     def collect(xss):
         d = defaultdict(list)
         for xs in xss:
             d[xs[0]].extend(xs[1:])
         return list(v for k,v in sorted(d.items()))

     y = [[0,'a','b'], [1,'c','d'], [2,'e','f'], [3,'g','h'], [1,'i','j'],
          [2,'k','l'], [4,'m','n'], [2,'o','p'], [4,'q','r'], [5,'s','t']]

     print collect(y)

Hi Paul,

thanks for your solution, and thanks to many other who provided
solutions. It'll take some time to go thru them.

btw, i disagree about your remark on crossposting. For those
interested, you can read in the following:

• 〈Cross-posting amp; Language Factions〉
http://xahlee.org/Netiquette_dir/cross-post.html

if anyone wants to argue with me about this, there's a my blog link at
the bottom of the page where you can leave a comment. Feel free to use
that.

i'll go over the solutions and post if i have anything interesting to
say. ☺ Possbly will select some to show on my site with credit of
course.

 Xah ∑ xahlee.org ☄
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Xah Lee
On Sep 26, 7:56 am, Sherm Pendley sherm.pend...@gmail.com wrote:
 Jürgen Exner jurge...@hotmail.com writes:
  Alexander Burger a...@software-lab.de wrote:
 In PicoLisp:

  What the f does PicoLisp have to with Perl?

 It's Xah. He cross-posts in an attempt to start a language feud.

 Please don't feed the troll.

sorry i disagree. And please don't randomly accuse... I posted the
following in reply to Paul Rubin's very valuable post, to
comp.lang.python only. But since you cross-posted your accusation, and
there are about 3 other posts of similar nature accusing me cross-
posted to all groups, so am posting a response to all groups too.

--
Paul,

...

btw, i disagree about your remark on crossposting. For those
interested, you can read in the following:

• 〈Cross-posting amp; Language Factions〉
http://xahlee.org/Netiquette_dir/cross-post.html

if anyone wants to argue with me about this, there's a my blog link at
the bottom of the page where you can leave a comment. Feel free to use
that.

i'll go over the solutions and post if i have anything interesting to
say. ☺ Possbly will select some to show on my site with credit of
course.

 Xah ∑ xahlee.org ☄
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Bakul Shah

On 9/25/10 9:05 PM, Xah Lee wrote:

here's a interesting toy list processing problem.

I have a list of lists, where each sublist is labelled by
a number. I need to collect together the contents of all sublists
sharing
the same label. So if I have the list

((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
r) (5 s t))

where the first element of each sublist is the label, I need to
produce:

output:
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

...

anyone care to give a solution in Python, Perl, javascript, or other
lang? am guessing the scheme solution can be much improved... perhaps
using some lib but that seems to show scheme is pretty weak if the lib
is non-standard.


In Q (from kx.com)[1]:

x:((0; a; b);(1; c; d);(2; e; f);(3; g; h);(1; i; j)
   (2; k; l);(4; m; n);(2; o; p);(4; q; r);(5; s; t))
f:{each [,/] each [each [1 _]] x @ value group x[;0]}
f x

outputs

ab
cdij
efklop
gh
mnqr
st

Note that this is actually a pretty general solution in that *all*
the functions used in it operate on a variety of types.
- The label could be anything, not just an integer.
- What follows a label can be a list of anything.
- Everything, except for = (the group function), has to do with
  *shaping* the output in the way you want. It is all basically
  cut-n-paste or pulling apart your Lego blocks and constructing
  a new toy from them! And most languages are really poor at that.
  *This* is why proponents of various languages should pay attention
  to such problems.



[1] In k3 (an older language from kx.com that you may be able to find
online), x is the same but f is as follows:

f:{,/'1_''x...@=x[;0]}
--
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Rhodri James
On Sun, 26 Sep 2010 23:16:24 +0100, Jürgen Exner jurge...@hotmail.com  
wrote:



I have solved my problems with Xah years ago, that's what killfiles are
for. And I have no idea why you are bringing up Xah in your current
rant.

It was livibetter who without any motivation or reasoning posted Python
code in CLPM. If at least he had asked something like How can I write
something similar in Perl? or _ANYTHING_ that would have made this even
remotely meaningful for CLPM, then ok.
But he didn't. He just dumped 7 lines of Python code to CLPM and his
only comment was Here is mine for Python. Yeah, great comment. Why
would anyone in CLPM possibly care about those 7 lines of Phython code?


Check the Newsgroups line: this is a standard Xah cross-post to
everywhere in sight troll.  Hence (a) bringing up Xah, since he
originated this thread, and (b) livibetter not thinking to trim the
crossposts.  Which you didn't either, I note.

The only downside to killfiles is that you have to pay attention or
you sometimes get bitten by this stuff.

--
Rhodri James *-* Wildebeest Herder to the Masses
--
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Ertugrul Söylemez
Xah Lee xah...@gmail.com wrote:

 here's a interesting toy list processing problem.

 I have a list of lists, where each sublist is labelled by a number. I
 need to collect together the contents of all sublists sharing the same
 label. So if I have the list

 ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
 r) (5 s t))

 where the first element of each sublist is the label, I need to
 produce:

 output:
 ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

 [...]

 anyone care to give a solution in Python, Perl, javascript, or other
 lang? am guessing the scheme solution can be much improved... perhaps
 using some lib but that seems to show scheme is pretty weak if the lib
 is non-standard.

In Haskell the solution looks like this:

  import qualified Data.Map as M
  import qualified Data.Set as S
  import Data.Map (Map)
  import Data.Set (Set)

  collect :: (Ord a, Ord k) = [Map k (Set a)] - Map k (Set a)
  collect = M.unionsWith S.union


Greets,
Ertugrul


-- 
nightmare = unsafePerformIO (getWrongWife = sex)
http://ertes.de/

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-26 Thread Ertugrul Söylemez
Ertugrul Söylemez e...@ertes.de wrote:

 In Haskell the solution looks like this:

 [...]

And before anyone starts to rant, I didn't pay attention to where I'm
X-posting this stuff.  Sorry for that.  But on the other hand you could
say that I'm giving the Perl people (apparently the only people feeling
the urge to rant anyway) the chance to come up with a more elegant
solution. =)


Greets,
Ertugrul


-- 
nightmare = unsafePerformIO (getWrongWife = sex)
http://ertes.de/

-- 
http://mail.python.org/mailman/listinfo/python-list


toy list processing problem: collect similar terms

2010-09-25 Thread Xah Lee
here's a interesting toy list processing problem.

I have a list of lists, where each sublist is labelled by
a number. I need to collect together the contents of all sublists
sharing
the same label. So if I have the list

((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
r) (5 s t))

where the first element of each sublist is the label, I need to
produce:

output:
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

a Mathematica solution is here:
http://xahlee.org/UnixResource_dir/writ/notations_mma.html

R5RS Scheme lisp solution:
http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm
by Sourav Mukherjee

also, a Common Lisp solution can be found here:
http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1ded8824bc750b?

anyone care to give a solution in Python, Perl, javascript, or other
lang? am guessing the scheme solution can be much improved... perhaps
using some lib but that seems to show scheme is pretty weak if the lib
is non-standard.

 Xah ∑ xahlee.org ☄
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-25 Thread Gary Herron

On 09/25/2010 09:05 PM, Xah Lee wrote:

here's a interesting toy list processing problem.

I have a list of lists, where each sublist is labelled by
a number. I need to collect together the contents of all sublists
sharing
the same label. So if I have the list

((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q
r) (5 s t))

where the first element of each sublist is the label, I need to
produce:

output:
((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

a Mathematica solution is here:
http://xahlee.org/UnixResource_dir/writ/notations_mma.html

R5RS Scheme lisp solution:
http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm
by Sourav Mukherjee

also, a Common Lisp solution can be found here:
http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1ded8824bc750b?

anyone care to give a solution in Python, Perl, javascript, or other
lang? am guessing the scheme solution can be much improved... perhaps
using some lib but that seems to show scheme is pretty weak if the lib
is non-standard.

  Xah ∑ xahlee.org ☄
   



Python 3:  (I have not tried to match the exact format of your output, 
but I get the right things is the right order.)


data = ((0,'a','b'), (1,'c','d'), (2,'e','f'), (3,'g','h'),
(1,'i','j'), (2,'k','l'), (4,'m','n'), (2,'o','p'),
(4,'q','r'), (5,'s','t'))

from collections import OrderedDict
r = OrderedDict()
for label,*rest in data:
r.setdefault(label, []).extend(rest)
print(list(r.values()))

produces:

(['a', 'b'], ['c', 'd', 'i', 'j'], ['e', 'f', 'k', 'l', 'o', 'p'], ['g', 
'h'], ['m', 'n', 'q', 'r'], ['s', 't'])



--
Gary Herron, PhD.
Department of Computer Science
DigiPen Institute of Technology
(425) 895-4418


--
http://mail.python.org/mailman/listinfo/python-list


Re: toy list processing problem: collect similar terms

2010-09-25 Thread Alexander Burger
In PicoLisp:

(mapcar
   '((X) (apply conc (cdr X)))
   (group List) )

Cheers,
- Alex
-- 
http://mail.python.org/mailman/listinfo/python-list