On 2012-10-24 07:07, Chris Rebert wrote:
On Tue, Oct 23, 2012 at 10:23 PM, seektime <michael.j.kra...@gmail.com> wrote:
Here's some example code. The input is a list which is a "matrix" of letters:
   a  b  a
   b  b  a

and I'd like to turn this into a Python array:

You mean a Python list. The datatype Python calls an `array` is very
different and relatively uncommonly used.
Although, confusingly, Python's lists are implemented using C arrays
rather than linked lists.

  1 2 1
  2 2 1

so 1 replaces a, and 2 replaces b. Here's the code I have so far:

L=['a b a\n','b b a\n']
<snip>
seq
'1 2 1\n 2 2 1\n'

My question is how can I turn "seq" into a python array?

I'd say you're asking the wrong question. The better question is "Why
wasn't the result a list in the first place?". Many transformations
are cumbersome to express over just strings, which is why the first
job of most programs is to parse their input into a more convenient
structure that is suited to their main task(s).

This (along with some other improvements) leads to a better, somewhat
different program/algorithm:

letter2number = {'a': 1, 'b': 2}
with open("path/to/file.txt", "r") as f:
     result = [[letter2number[letter] for letter in line.strip().split()] for 
line in f]

If you're using .split() then you don't need to use .strip() as well:

result = [[letter2number[letter] for letter in line.split()] for line in f]

If it's safe to assume that the correspondence between the letters and
numbers isn't completely arbitrary, some further improvements are also
possible.

Some relevant docs:
http://docs.python.org/library/stdtypes.html#string-methods
http://docs.python.org/tutorial/datastructures.html#list-comprehensions

Cheers,
Chris

P.S.: I'm guessing you obtained `L` from file.readlines() or similar;
it is worth noting for future reference that the readlines() method is
considered somewhat deprecated.


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

Reply via email to