1

こんにちは、リストに隣接する値が何回あるかを数えようとしています。簡単にするために、私が探しているものの例を以下に示します。

list= [2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 3, 2, 0, 2, 2, 0, 0, 0, 0] の入力リストがあり、 2,2,2,2 1,1 と 2,2 は隣接する値が等しいため、3 を出力します。(ゼロは無視されます)。

辞書を使えば解けるでしょうか?

dict={}
list= [2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 3, 2, 0, 2, 2, 0, 0, 0, 0]     

for x in range(1, len(list)):
    if list[x]=0:
         pass
    elif list[x]=list[x-1]:
          dict          #this is the part I'm having trouble implementing
4

3 に答える 3

6
myList = [2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 3, 2, 0, 2, 2, 0, 0, 0, 0]
import itertools
print sum(1 for key, group in itertools.groupby(myList) if len(list(group)) > 1 and key)

読みやすい形式:

print sum(1
          for key, group in itertools.groupby(myList)
          if len(list(group)) > 1 and key)

出力

3

編集:上記の方法を使用したくない場合は、

myList = [2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 3, 2, 0, 2, 2, 0, 0, 0, 0]
previous, count, result = myList[0], 0, 0
for num in myList[1:]:
    if num == 0: continue
    if previous != num:
        if count:
            result += 1
        previous = num
        count = 0
    else:
        count += 1
if count: result += 1
print result

出力

3

編集1:コメントセクションでのリクエストに従って、

myList = [2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 3, 2, 0, 2, 2, 0, 0, 0, 0]
import itertools
groupedItems = [list(group) for key, group in itertools.groupby(myList) if key]
groupedItemsSizes = [len(item) for item in groupedItems if len(item) > 1]
print len(groupedItemsSizes)             # Number of repeating groups
print float(sum(groupedItemsSizes))/len(groupedItemsSizes)  # Mean

出力

3
2.66666666667
于 2013-10-23T12:34:33.070 に答える
0
import itertools

lst = [2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 1, 3, 2, 0, 2, 2, 0, 0, 0, 0]

tran_1 =  [list(group) for key, group in itertools.groupby(lst)]

print sum([1 for ele in tran_1 if ele[0] and len(ele) > 1])
于 2013-10-23T12:41:47.557 に答える