[Tutor] mapping/filtering a sequence

Martin A. Brown martin at linux-ip.net
Sat Sep 5 16:45:29 CEST 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

 : I am doing some data massage, minor mapping and filtering really 
 : and i find that i have a lot of this kind of kludgy code:
 : 
 : # -- -------------------------
 : def filt_seq(inseq):
 : 	out_list = []
 : 	for item in inseq:
 : 		# 38 needs to be mapped on to 34 as we don't have a 38 in our
 : 		grid
 : 		if item == 38:
 : 			item = item - 4
 : 			out_list.append(item)
 : 		# We also don't have a 40, but we do have a 39. Map that
 : 		sucka
 : 		elif item == 40:
 : 			item = item - 1
 : 			out_list.append(item)
 : 		# if we get values that fall in good places, just pass them
 : 		on to the out seq
 : 		else:
 : 			out_list.append(item)
 : 	return out_list
 : 
 : # -- -------------------------
 : 
 : To do some basic jiggering of some out of range off grid data.
 : 
 : There has to be a better, more elegant, more flexible less brute 
 : force more pythonic way to do this kind of mapping no?

Have you discovered the map() builtin yet?

I would imagine that others on this list will have some even more 
elegant and efficient solutions for you, but here's a possibility:

  def filt_seq( thing ):
    if thing == 38:
      thing = thing - 4
    elif thing == 40:
      thing = thing - 1
    return thing
  
  l = [ 1, 17, 12, 38, 4, 40, 17, 19 ]
  l = map( filt_seq, l )

Good luck,

- -Martin

- -- 
Martin A. Brown
http://linux-ip.net/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: pgf-0.72 (http://linux-ip.net/sw/pine-gpg-filter/)

iD8DBQFKonmNHEoZD1iZ+YcRAme7AKDqThvHP6+3xbzBg1p48rxmY21ztgCdFYnA
Z2YGRnW7HLm/1oroaCTmkgg=
=G9w5
-----END PGP SIGNATURE-----


More information about the Tutor mailing list