2016-08-30 3 views
-1

私は以下のコードで試しています。Python [Duplicates with]を使ってリスト内のシーケンスの長さを見つける方法は?

from itertools import groupby 

range_mod = ['P', 'P', 'P', 'P', 'N', 'N', 'N', 'N', 'P', 'P', 'P'] 

print(dict((i,len(list(j))) for i, j in groupby(range_mod))) 

注:

{'P': 3, 'N': 4} 

予想される出力:出力は辞書です

で実際の出力である必要はありません、私は辞書が重複キーを許可していません承知しています。だから、事前に

{'P': 4, 'N': 4, 'P' : 3} 

おかげで他のオプションを探しています。

+0

あなたは 'P'カウントを取得しているの? – depperm

+0

私たちは2組の 'P'を持っているので、辞書は上書きされているので、 'P'の値は '3'として表示されます。期待される出力を修正します。ありがとう – goks

+0

Pの上のタイプミス?いずれにせよ、あなたは[( 'P'、4)、( 'N'、4)...]のようなリストを得るのが最善であるかもしれません。 – Lost

答えて

1

あなたが行うことができます:または、より簡潔に

>>> lengths=[] 
>>> for k, g in groupby(range_mod): 
... lengths.append({k:len(list(g))}) 
... 
>>> lengths 
[{'P': 4}, {'N': 4}, {'P': 3}] 

>>> [{k:len(list(g))} for k, g in groupby(range_mod)] 
[{'P': 4}, {'N': 4}, {'P': 3}] 

またはタプル:

>>> [(k,len(list(g))) for k, g in groupby(range_mod)] 
[('P', 4), ('N', 4), ('P', 3)] 
8
>>> print(list((i,len(list(j))) for i, j in groupby(range_mod))) 
[('P', 4), ('N', 4), ('P', 3)] 

これはいかがですか?^

+0

うわー。これはまさに私が探していたものです。ありがとうSwakeert :) – goks

+0

'list'への外部呼び出しの代わりにリストの理解を使用すると、ちょっときれいになることができます:' groupby(range_mod)のi、jに対して '(i、len(list(j))] ) '。いい答え! – DeepSpace

関連する問題