On 2012-10-23, at 10:23 PM, seektime <michael.j.kra...@gmail.com> wrote:
> My question is how can I turn "seq" into a python array?
Something like this perhaps?:
>>> alpha = ('a', 'b')
>>> numeric = ('1', '2')
>>> L = ['a b a\n', 'b b a\n']
>>> s = ' '.join(L)
>>> d = dict(zip(alpha, numeric))
>>> list_ = [d[c] for c in s.strip('\n').split()]
>>> list_
On Wed, Oct 24, 2012 at 1:23 AM, 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:
> 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://gommeitputor.wordpress.com/2008/09/27/search-replace-multiple-...).
> ... def replace_all(text, dic):
> ... for i, j in dic.iteritems():
> ... text = text.replace(i, j)
> ... return text
> ...
x = seq.split('\n ')
array_list = [ ]
next_3_d_array = []
range_of_seq = len(seq)
for num in range(0,range_of_seq):
if num % 3 != 0:
next_3_d_array.append(num)
if num % 3 == 0:
array_list.append(next_3_d_array)
next_3_d_array = [ ]
> Of course, if you want these to be ints, then you can either change the format of your int list, or map(int, list_) if you don't have control over it.
Ugh, I'm tired. Shouldn't map it, the conversion should be done in the list comprehension to avoid a needless second list iteration.
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 it's safe to assume that the correspondence between the letters and
numbers isn't completely arbitrary, some further improvements are also
possible.
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.
> 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
> 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.
> 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.
> 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
...
> 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).
> 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).
On Wed, Oct 24, 2012 at 9:27 PM, seektime <michael.j.kra...@gmail.com> 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 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).
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).
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!
On Thu, 25 Oct 2012 07:47:48 +0200, Peter Otten wrote:
> 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!
I don't think so. Are you thinking of the famous Monty Python "Dead Parrot Sketch"? Here's one of many versions:
Steven D'Aprano wrote:
> On Thu, 25 Oct 2012 07:47:48 +0200, Peter Otten wrote:
>> 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!
> I don't think so. Are you thinking of the famous Monty Python "Dead
> Parrot Sketch"? Here's one of many versions:
My rendition was meant to be a travesty of that one, an "undead" parrot as a follow-up to Dennis' "lich" post. I'm sorry I forgot the smiley ;)
- He didn't move, that was just the wind stirring his plumage.
- No, that parrot is alive and kicking, fresh as a daisy, full of beans...
- Aren't the glass eyes beautiful?
- Glass eyes -- he just blinked!
And so on. I'm off to work on my laden swallow branch of Python. It's going to be a real heavy-weight...
>> On Thu, 25 Oct 2012 07:47:48 +0200, Peter Otten wrote:
>>> 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!
>> I don't think so. Are you thinking of the famous Monty Python "Dead
>> Parrot Sketch"? Here's one of many versions:
> My rendition was meant to be a travesty of that one, an "undead" parrot as a
> follow-up to Dennis' "lich" post. I'm sorry I forgot the smiley ;)
> - He didn't move, that was just the wind stirring his plumage.
> - No, that parrot is alive and kicking, fresh as a daisy, full of beans...
> - Aren't the glass eyes beautiful?
> - Glass eyes -- he just blinked!
> And so on. I'm off to work on my laden swallow branch of Python. It's going
> to be a real heavy-weight...
I just hope you get the technicalities correct. "That parrot wouldn't move if you put 4 million volts through it". What rubbish. It should either have been 4 million amps through it or 4 million volts across it. I'm +1 for the former, although possibly biased by history.
David Hutto wrote:
> On Wed, Oct 24, 2012 at 1:23 AM, 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:
> > 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://gommeitputor.wordpress.com/2008/09/27/search-replace-multiple-...).
> > ... def replace_all(text, dic):
> > ... for i, j in dic.iteritems():
> > ... text = text.replace(i, j)
> > ... return text
> > ...
> I'd suggest, if this is what you're referring to:
> x = seq.split('\n ')
> array_list = [ ]
> next_3_d_array = []
> range_of_seq = len(seq)
> for num in range(0,range_of_seq):
> if num % 3 != 0:
> next_3_d_array.append(num)
> if num % 3 == 0:
> array_list.append(next_3_d_array)
> next_3_d_array = [ ]
Wow, that looks complicated. Why hardcode to 3 instead of where ever
the newline is?
>>> [ int(x.strip()) for subseq in seq.split('\n') for x in subseq.split() ]
[1, 2, 1, 2, 2, 1]
>>> lst = []
# OR
>>> for subseq in seq.split('\n'):
... for x in subseq.split():
... lst.append( int(x.strip()))
...
Ramit Prasad
This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.