Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > turn list of letters into an array of integers

Reply
Thread Tools

turn list of letters into an array of integers

 
 
Robert Kern
Guest
Posts: n/a
 
      10-24-2012
On 10/24/12 1:03 PM, 88888 Dihedral wrote:

> The list in python is a list of valid python objects.
> For the number crunching part, please use arrays in numarray and scipy.


Your bot's database is laughably out of date.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco

 
Reply With Quote
 
 
 
 
Terry Reedy
Guest
Posts: n/a
 
      10-24-2012
On 10/24/2012 1:23 AM, seektime 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:
>
> 1 2 1
> 2 2 1
>
> so 1 replaces a, and 2 replaces b.


If you are going to replace single characters (letters) with single
characters (digits), use maketrans and translate.

>>> 'a b c'.translate(str.maketrans('abc', '123'))

'1 2 3'

--
Terry Jan Reedy

 
Reply With Quote
 
 
 
 
MRAB
Guest
Posts: n/a
 
      10-24-2012
On 2012-10-24 07:07, Chris Rebert wrote:
> On Tue, Oct 23, 2012 at 10:23 PM, seektime <(E-Mail Removed)> 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/stdty...string-methods
> http://docs.python.org/tutorial/data...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.
>


 
Reply With Quote
 
wxjmfauth@gmail.com
Guest
Posts: n/a
 
      10-24-2012
Le mercredi 24 octobre 2012 07:23:11 UTC+2, seektime a écrit*:
> 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:
>
>
>
> 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']

>
> >>> s=' '.join(L)

>
> >>> seq1=('a','b')

>
> >>> seq2=('1','2')

>
> >>> d = dict(zip(seq1,seq2))

>
> >>> # Define method to replace letters according to dictionary (got this from http://gomputor.wordpress.com/2008/0...s-with-python/).

>
> ... def replace_all(text, dic):
>
> ... for i, j in dic.iteritems():
>
> ... text = text.replace(i, j)
>
> ... return text
>
> ...
>
>
>
> >>> seq = replace_all(s,d)

>
> >>> print seq

>
> 1 2 1
>
> 2 2 1
>
>
>
> >>> seq

>
> '1 2 1\n 2 2 1\n'
>
>
>
> My question is how can I turn "seq" into a python array?
>
>
>
> Thanks
>
> Michael


Not so sure what you mean by an "array of integers".

>>> def z(s):

.... a = s.splitlines()
.... b = [e.split() for e in a]
.... for row in range(len(b)):
.... for col in range(len(b[row])):
.... b[row][col] = ord(b[row][col]) - ord('a')
.... return b
....
>>> z('a b a\n b b a')

[[0, 1, 0], [1, 1, 0]]
>>>
>>> # or
>>> table = {'a': 111, 'b': 222}
>>>
>>> def z2(s, table):

.... a = s.splitlines()
.... b = [e.split() for e in a]
.... for row in range(len(b)):
.... for col in range(len(b[row])):
.... b[row][col] = table[b[row][col]]
.... return b
....
>>> z2('a b a\n b b a', table)

[[111, 222, 111], [222, 222, 111]]
>>>
>>> # note
>>> z('a\n b b b b b\n a a')

[[0], [1, 1, 1, 1, 1], [0, 0]]

jmf
 
Reply With Quote
 
Demian Brecht
Guest
Posts: n/a
 
      10-24-2012

On 2012-10-24, at 10:27 AM, http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> Not so sure what you mean by an "array of integers".



I wasn't entirely sure about that either. I assumed given the subject that it was just a 1-D array and could then be accessed by arr[(y * width) + x].

Demian Brecht
@demianbrecht
http://demianbrecht.github.com




 
Reply With Quote
 
Dennis Lee Bieber
Guest
Posts: n/a
 
      10-24-2012
On Wed, 24 Oct 2012 11:04:38 +0200, Peter Otten <(E-Mail Removed)>
declaimed the following in gmane.comp.python.general:

> Peter Otten wrote:
>
> Brave new words:
>
> > immortable

>
> should be "immortal"


Readlines() isn't immortal... It's a lich
http://en.wikipedia.org/wiki/Lich
--
Wulfraed Dennis Lee Bieber AF6VN
(E-Mail Removed) HTTP://wlfraed.home.netcom.com/

 
Reply With Quote
 
seektime
Guest
Posts: n/a
 
      10-25-2012
On Tuesday, October 23, 2012 11:07:29 PM UTC-7, Chris Rebert wrote:
> On Tue, Oct 23, 2012 at 10:23 PM, seektime <(E-Mail Removed)> 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 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/stdty...string-methods
>
> http://docs.python.org/tutorial/data...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.


Thanks to everyone lots of great comments are actionable suggestions.

My intension is to used the numpy/scipy packages to solve the task at hand.I agree that there's no point in loading a file into a format which only needs to be converted right after loading. But I'm new to Python the f.readline(s) command, according to the 2.7.3 tutorial and manual, is pretty much all there is for file i/o. If, as you indicated, f.readlines() is deprecated then what should I use instead? I'm using ver. 2.6 on Linux (it's a bit dated, I know).
 
Reply With Quote
 
seektime
Guest
Posts: n/a
 
      10-25-2012
On Tuesday, October 23, 2012 11:07:29 PM UTC-7, Chris Rebert wrote:
> On Tue, Oct 23, 2012 at 10:23 PM, seektime <(E-Mail Removed)> 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 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/stdty...string-methods
>
> http://docs.python.org/tutorial/data...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.


Thanks to everyone lots of great comments are actionable suggestions.

My intension is to used the numpy/scipy packages to solve the task at hand.I agree that there's no point in loading a file into a format which only needs to be converted right after loading. But I'm new to Python the f.readline(s) command, according to the 2.7.3 tutorial and manual, is pretty much all there is for file i/o. If, as you indicated, f.readlines() is deprecated then what should I use instead? I'm using ver. 2.6 on Linux (it's a bit dated, I know).
 
Reply With Quote
 
Chris Rebert
Guest
Posts: n/a
 
      10-25-2012
On Wed, Oct 24, 2012 at 9:27 PM, seektime <(E-Mail Removed)> wrote:
> On Tuesday, October 23, 2012 11:07:29 PM UTC-7, Chris Rebert wrote:

<snip>
>> 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.

>
> Thanks to everyone lots of great comments are actionable suggestions.
>
> My intension is to used the numpy/scipy packages to solve the task at hand. I agree that there's no point in loading a file into a format which onlyneeds to be converted right after loading. But I'm new to Python the f.readline(s) command, according to the 2.7.3 tutorial and manual, is pretty much all there is for file i/o. If, as you indicated, f.readlines() is deprecated then what should I use instead? I'm using ver. 2.6 on Linux (it's a bitdated, I know).


Just iterate over the file directly using a for-loop (e.g. `for line
in some_file:`). Each iteration yields one line of the file. I used a
very minor variation of this approach in my code (a list comprehension
is just syntax sugar for a for-loop).

Cheers,
Chris
 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      10-25-2012
Dennis Lee Bieber wrote:

> On Wed, 24 Oct 2012 11:04:38 +0200, Peter Otten <(E-Mail Removed)>
> declaimed the following in gmane.comp.python.general:
>
>> Peter Otten wrote:
>>
>> Brave new words:
>>
>> > immortable

>>
>> should be "immortal"

>
> Readlines() isn't immortal... It's a lich
> http://en.wikipedia.org/wiki/Lich


Wasn't there a Monty Python sketch where a man carrying a parrot in a cage
comes into a shop full of stuffed animals and complains: No, I don't admire
the taxidermist for making that parrot look like it were alive -- that beast
bit me!

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Converting a list of strings into a list of integers? Jan Riechers Python 4 07-23-2012 03:31 PM
Re: Converting a list of strings into a list of integers? David Robinow Python 0 07-22-2012 05:03 PM
Re: Converting a list of strings into a list of integers? Paul Rubin Python 0 07-22-2012 05:03 PM
Re: Converting a list of strings into a list of integers? Roy Smith Python 1 07-22-2012 04:30 PM
How to instantaneously convert array of Integers into an array onint's? Royan Java 32 08-15-2008 02:20 AM



Advertisments