2016-10-21 7 views
-1

A = [1,2,0,0,3,4,5、-1,0,2、-1、-3,0,0,0,0、 0,0,0,0,2 - 、 - 3、-4、-5,0,0,0]整数リストの中で最も長い0のシーケンスを見つける

リスト内で最も長い0のシーケンスの最初と最後のインデックスを返します。 上記のリストの0の最長シーケンスは0,0,0,0,0,0,0,0なので、開始インデックスと終了インデックスとして12,19を返さなければなりません。一部の1行のPythonコードで助けてください。

私が試した:

最大長として8を返し
k=max(len(list(y)) for (c,y) in itertools.groupby(A) if c==0) 
print(k) 

を。

ここで、最長シーケンスの開始および終了インデックスを見つける方法はありますか?

+0

このように、おそらくコードがあり、おそらくそのコードを実行した結果があります。あなたの質問は何ですか? – TigerhawkT3

+0

これを1行に書く必要があります。Pythonコード –

+2

これは問題ではありません。それは割り当てです。 – TigerhawkT3

答えて

2

を共有したいと思いました最長のシーケンスを取得するにはlist(y) for (x,y) in list if x == 0

と最後max(list, key=len)でを使用して、

フィルタのみ0秒。

import itertools,operator 
r = max((list(y) for (x,y) in itertools.groupby((enumerate(A)),operator.itemgetter(1)) if x == 0), key=len) 
print(r[0][0]) # prints 12 
print(r[-1][0]) # prints 19 
0

あなたはこれを試すことができます。

A = [1,2,0,0,3,4,5,-1,0,2,-1,-3,0,0,0,0,0,0,0,0,2,-3,-4,-5,0,0,0] 

count = 0 
prev = 0 
indexend = 0 
for i in range(0,len(A)): 
    if A[i] == 0: 
     count += 1 
    elif count > prev: 
     prev = count 
     indexend = i 
    else: count = 0 

print("The longest sequence of 0's is "+str(prev)) 
print("index start at: "+ str(indexend-prev)) 
print("index ends at: "+ str(indexend-1)) 

出力:

最も長いシーケンスの0のIST 8

index start at: 12 

index ends at: 19 
0

あなたは長さを持っていることを、そのKを見つけます元のリストの長さ0のシーケンス。あなたは最終的に1つのラインにうまくいくものの拡大:

# k is given in your post 
k_zeros = [0]*k 
for i in range(len(A)-k): 
    if A[i:i+k] == k_zeros: 
     break 
# i is the start index; i+k-1 is the end 

をあなたが今、単一のステートメントにこれをラップすることはできますか?

0

よろしくお願いします。

"-".join([sorted([list(y) for c,y in itertools.groupby([str(v)+"_"+str(i) for i,v in enumerate(A)], lambda x: x.split("_")[0]) if c[0] == '0'],key=len)[-1][a].split("_")[1] for a in [0,-1]]) 

それは["1_0","2_1","0_2",..][1,2,0...]を回し、その後、いくつかの分割および解析を行うことによって指標を追跡します。

はい、それは非常に醜いだとあなたは他の答えの一つで行く必要がありますが、私はあなたが最初の項目でグループに、インデックスにアイテムを圧縮するenumerateを使用

、その後itertools.groupby(list,operator.itemgetter(1))でき

関連する問題