turn list of letters into an array of integers
88888 Dihedral
dihedral88888 at googlemail.com
Wed Oct 24 08:03:52 EDT 2012
Chris Rebert於 2012年10月24日星期三UTC+8下午2時07分29秒寫道:
> On Tue, Oct 23, 2012 at 10:23 PM, seektime <michael.j.krause at 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.
The list in python is a list of valid python objects.
For the number crunching part, please use arrays in numarray and scipy.
>
> > 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 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.
More information about the Python-list
mailing list