私は以下の問題があります。整数のリストを持つので、元の入力リストの2つの要素の間のステップが1でないときはいつでも、リストのリストに分割したいと思います。 例:input = [0,1,3,5,6,7,8] 7]、出力= [[0,1]、[3]、[5,6,7]]Python:それらの間のステップに基づく整数の分割リスト
私は次の機能を書いていますが、それは地獄のように醜いです。より良いソリューションを手に入れるのに役立ちます。私はitertoolsを使用しようとしましたが、解決できませんでした。
ここに私のソリューションです:
def _get_parts(list_of_indices):
lv = list_of_indices
tuples = zip(lv[:-1], lv[1:])
split_values = []
for i in tuples:
if i[1] - i[0] != 1:
split_values.append(i[1])
string = '/'.join([str(i) for i in lv])
substrings = []
for i in split_values:
part = string.split(str(i))
substrings.append(part[0])
string = string.lstrip(part[0])
substrings.append(string)
result = []
for i in substrings:
i = i.rstrip('/')
result.append([int(n) for n in i.split('/')])
return result
どうもありがとう!
すてきな解決策。私は説明が役に立つと思います: 'j = count()'はカウンタを作成します。 'next(j)'を呼び出すたびに1ずつintステップが返されます。 Pythonの動作が分かりません:関数の引数のデフォルト値は関数作成時に一度作成されます。したがって、 'j'はcount()で一度だけ初期化され、' key'への次の呼び出しでは、arg'j'はインスタンスが前に作成されます。 'groupby'は同じキー値を持つ' inp'のすべての項目を 'it'' iterableに追加します。キーの値が変更された場合、新しいgが作成されます。 inp:item = 0、key = 0-0 = 0のアイテムの場合、項目= 1、キー= 1-1 = 0;アイテム= 3、キー= 3-2 = 1; item = 5、key = 5-3 = 2などとなります。 – stalk