Re: toy list processing problem: collect similar terms
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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)
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)
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
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)
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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 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
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
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
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
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
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
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
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
In PicoLisp: (mapcar '((X) (apply conc (cdr X))) (group List) ) Cheers, - Alex -- http://mail.python.org/mailman/listinfo/python-list