turn list of letters into an array of integers
wxjmfauth at gmail.com
wxjmfauth at gmail.com
Wed Oct 24 13:27:27 EDT 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/09/27/search-replace-multiple-words-or-characters-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
More information about the Python-list
mailing list