-5

['c','c','c','c','c','h','h','h','h','h','e','e','e','e','e'] このリストをこれに変換するにはどうすればよいですか[0,0,0,0,0,1,1,1,1,1,2,2,2,2,2]

4

4 に答える 4

2

少し不明確ですが、これはあなたが求めているものですか?

In [2]: conv={'c':0,'h':1,'e':2}

In [3]: a=['c','c','c','c','c','h','h','h','h','h','e','e','e','e','e']

In [4]: [conv[i] for i in a]
Out[4]: [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
于 2013-02-17T14:27:38.503 に答える
1

string.maketransとstring.translateを使用して、同様のことを行うこともできます。

>>> import string
>>> t = string.maketrans("che", "012")
>>> test_str = "ccccchhhhheeeee"
>>> string.translate(test_str, t)
'000001111122222'
于 2013-02-17T14:40:42.537 に答える
0

問題は非常に不明確です。出力を取得するためにオリジナルに対して何らかの操作を実行したい場合は、マップを使用することをお勧めします。好みに応じて変換する任意の関数を渡すことができます

>>> a = ["a", "b", "c"]
>>> converted = map(lambda x: ord(x), a)
>>> print converted
[97, 98, 99]

基本的な考え方は、元のリストの各要素に作用して変換する関数をマップに渡すことです。たとえば、各文字のアルファベット値を取得するには、ラムダ関数を次のように記述します。lambda x : ord(char.lower()) - 96

例えば:

>>> a = ["a", "b", "c"]  
>>> converted = map(lambda x : ord(x.lower()) - 96 , a)
>>> print converted
[1, 2, 3]
于 2013-02-17T14:22:19.523 に答える
0

あなたの問題は非常に明確にされていませんが、私の野生の推測が着陸した場合、おそらく次のようなものです:

>>> s = ['c','c','c','c','c','h','h','h','h','h','e','e','e','e','e']
>>> from itertools import groupby, chain
>>> counted = enumerate(len(list(g)) for k,g in groupby(s))
>>> list(chain.from_iterable([i]*c for i,c in counted))
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]

あなたが欲しいものをあなたに与えるだろうか?これはgroupby、隣接する隣接する用語を収集するために使用します。

>>> [(k, list(g)) for k,g in groupby(s)]
[('c', ['c', 'c', 'c', 'c', 'c']), ('h', ['h', 'h', 'h', 'h', 'h']), ('e', ['e', 'e', 'e', 'e', 'e'])]
>>> [len(list(g)) for k,g in groupby(s)]
[5, 5, 5]

そしてenumerateそれらを数えるために:

>>> list(enumerate(len(list(g)) for k,g in groupby(s)))
[(0, 5), (1, 5), (2, 5)]

そして最後chainにそれらを平らな形で再結合します:

>>> [[i]*c for i, c in enumerate(len(list(g)) for k,g in groupby(s))]
[[0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [2, 2, 2, 2, 2]]
>>> list(chain.from_iterable([[i]*c for i, c in enumerate(len(list(g)) for k,g in groupby(s))]))
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
于 2013-02-17T14:30:02.513 に答える