Re: Converting a string to an array?

2006-01-13 Thread Paul Rubin
Tim Chase [EMAIL PROTECTED] writes:
 The closest hack I could come up with was
 
   import random
   s = abcdefg
   a = []
   a.extend(s)
   random.shuffle(a)
   s = .join(a)

You could use

import random
s = list(abcdefg)
random.shuffle(s)
s = .join(s)

which cuts down the clutter slightly.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Converting a string to an array?

2006-01-13 Thread Bryan Olson
Tim Chase wrote:
 While working on a Jumble-esque program, I was trying to get a string 
 into a character array.  Unfortunately, it seems to choke on the following
 
 import random
 s = abcefg
 random.shuffle(s)
 
 returning
 
   File /usr/lib/python2.3/random.py, line 250, in shuffle
 x[i], x[j] = x[j], x[i]
   TypeError: object doesn't support item assignment

Yes, Python has had that same problem elsewhere, notably the
mutating methods 'sort' and 'reverse'. Those problems are now
reasonably well solved. What's really neat is that the names
of the new methods: 'sorted' and 'reversed', are adjectives
describing the return values we want, where 'sort' and
'reverse' are verbs, calling for procedures to be performed.


For sorting, we had the procedure 'sort', then added the pure
function 'sorted'. We had a 'reverse' procedure, and wisely
added the 'reversed' function.

Hmmm... what we could we possible do about 'shuffle'?


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


gracefully handling broken pipes (was Re: Converting a string to an array?)

2006-01-13 Thread Tim Chase
   import random
   s = abcdefg
   data = list(s)
   random.shuffle(data)
   .join(data)
 'bfegacd'
 
 fit you better?

Excellent!  Thanks.  I kept trying to find something like an 
array() function.  Too many languages, too little depth.

The program was just a short script to scramble the insides of 
words to exercise word recognition, even when the word is mangled.

It's amazing how little code it takes to get this working.

When using it as a filter, if a downstream pipe (such as head) 
cuts it off, I get an error:

bash# ./scramble.py bigfile.txt | head -50

[proper output here]

Traceback (most recent call last):
  File ./scramble.py, line 11, in ?
print r.sub(shuffleWord, line),
IOError: [Errno 32] Broken pipe

At the moment, I'm just wrapping the lot in a try/except block, 
and ignoring the error.  Is there a better way to deal with this 
gracefully?  If some more serious IO error occurred, it would be 
nice to not throw that baby out with the bath-water.  Is there a 
way to discern a broken pipe from other IOError exceptions?

Thanks again.

-tim

import random, sys, re
r = re.compile([A-Za-z][a-z]{3,})
def shuffleWord(matchobj):
 s = matchobj.group(0)
 a = list(s[1:-1])
 random.shuffle(a)
 return .join([s[0], .join(a), s[-1]])
try:
 for line in sys.stdin.readlines():
 print r.sub(shuffleWord, line),
except IOError:
 pass




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


Re: Converting a string to an array?

2006-01-13 Thread Tim Peters
[Bryan Olson]
 ...
 For sorting, we had the procedure 'sort', then added the pure
 function 'sorted'. We had a 'reverse' procedure, and wisely
 added the 'reversed' function.

 Hmmm... what we could we possible do about 'shuffle'?

'permuted' is the obvious answer, but that would leave us open to more
charges of hifalutin elitism, so the user-friendly and slightly risque
'jiggled' it is.

sorry-it-can't-be-'shuffled'-we-ran-out-of-'f's-ly y'rs  - tim
-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Converting a string to an array?

2006-01-12 Thread Ron Griswold
Does this do what you are looking for?

 s = 'abcdefg';
 a = [];
 a += s;
 a;
['a', 'b', 'c', 'd', 'e', 'f', 'g']

Ron Griswold
Character TD
R!OT Pictures
[EMAIL PROTECTED]


-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf
Of Tim Chase
Sent: Thursday, January 12, 2006 12:20 PM
To: python-list@python.org
Subject: Converting a string to an array?

While working on a Jumble-esque program, I was trying to get a 
string into a character array.  Unfortunately, it seems to choke 
on the following

import random
s = abcefg
random.shuffle(s)

returning

   File /usr/lib/python2.3/random.py, line 250, in shuffle
 x[i], x[j] = x[j], x[i]
   TypeError: object doesn't support item assignment

The closest hack I could come up with was

import random
s = abcdefg
a = []
a.extend(s)
random.shuffle(a)
s = .join(a)

This lacks the beauty of most python code, and clearly feels like 
there's somethign I'm missing.  Is there some method or function 
I've overlooked that would convert a string to an array with less 
song-and-dance?  Thanks,

-tim





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

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


Re: Converting a string to an array?

2006-01-12 Thread Grant Edwards
On 2006-01-12, Ron Griswold [EMAIL PROTECTED] wrote:

 This lacks the beauty of most python code, and clearly feels like 
 there's somethign I'm missing.  Is there some method or function 
 I've overlooked that would convert a string to an array with less 
 song-and-dance?  Thanks,

  import random
  s = abcdefg
  a = []
  a.extend(s)
  random.shuffle(a)
  s = .join(a)


 Does this do what you are looking for?

 s = 'abcdefg';
 a = [];
 a += s;
 a;
 ['a', 'b', 'c', 'd', 'e', 'f', 'g']

That's a bit round-about:

 list('abcdefg')
['a', 'b', 'c', 'd', 'e', 'f', 'g']

-- 
Grant Edwards   grante Yow!  Yow! Am I cleansed
  at   yet?!
   visi.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Converting a string to an array?

2006-01-12 Thread Xavier Morel
Tim Chase wrote:
 The closest hack I could come up with was
 
   import random
   s = abcdefg
   a = []
   a.extend(s)
   random.shuffle(a)
   s = .join(a)
 
 This lacks the beauty of most python code, and clearly feels like 
 there's somethign I'm missing.  Is there some method or function 
 I've overlooked that would convert a string to an array with less 
 song-and-dance?  Thanks,
 
 -tim
 

Would

  import random
  s = abcdefg
  data = list(s)
  random.shuffle(data)
  .join(data)
'bfegacd'
 

fit you better?
-- 
http://mail.python.org/mailman/listinfo/python-list