条件に基づいてリストを複数のリストに分割したい。シリーズの相違が4以上になると、最後の分割項目からその項目までリストを分割することがトリガーになります。例えばリストを条件ごとにリストに分割する方法は?
:条件によって
in = [1,2,3,9,10,11,100,200]
out = [ [1,2,3 ], [ 9,10,11 ], [100], [200] ]
If (next - prev) > 4
条件に基づいてリストを複数のリストに分割したい。シリーズの相違が4以上になると、最後の分割項目からその項目までリストを分割することがトリガーになります。例えばリストを条件ごとにリストに分割する方法は?
:条件によって
in = [1,2,3,9,10,11,100,200]
out = [ [1,2,3 ], [ 9,10,11 ], [100], [200] ]
If (next - prev) > 4
def splitlist(L):
if not L: return []
answer = [[L[0]]]
for i in L[1:]:
if i - answer[-1][-1] < 4:
answer[-1].append(i)
else:
answer.append([i])
return answer
出力:
In [112]: splitlist([1,2,3,9,10,11,100,200])
Out[112]: [[1, 2, 3], [9, 10, 11], [100], [200]]
注意:でと次はそれぞれPythonキーワードと組み込み関数です。ある
in_list = [1, 2, 3, 9, 10, 11, 100, 200]
parts = [[]]
for prev_item, next_item in zip(in_list[:-1], in_list[1:]):
top = parts[-1]
top.append(prev_item)
if next_item - prev_item > 4:
parts.append([])
top = parts[-1]
top.append(in_list[-1])
出力:numpy
モジュールを使用して
[[1, 2, 3], [9, 10, 11], [100], [200]]
ショート溶液:
トリックは、同じリストの2つのスライスとzip()
関数を使用することであるが、一つの項目にシフト
import numpy as np
arr = np.array([1,2,3,9,10,11,100,200])
out = [a.tolist() for a in np.split(arr, np.where(np.diff(arr) > 4)[0]+1)]
print(out)
出力:
[[1, 2, 3], [9, 10, 11], [100], [200]]
np.where(np.diff(arr) > 4)
- によって初期アレイを分割 -が
np.split(x, indices)
が満たされる条件"次の値と前回値との差が4よりも大きい" 配列インデックスを見つけます。重要な指標
数値的なアプローチが好き。 –
ssibleアプローチ:
ls = [1,2,3,9,10,11,100,200, 201, 209]
#output list
output = list()
startind = 0
for ind, val in enumerate(ls):
if ls[ind]-ls[ind-1] > 4:
output.append(ls[startind:ind])
startind = ind
# appending the left over from last detected difference of 4
output.append(ls[startind:])
print output
出力:[[1、2、3]、[9、10、11]、[100]、[200、201]、[209]]
はあなたが何を表示することができますあなたはこれまでに試しましたか?たぶんあなたは本当に近くにありました。余分な目があなたが作っている小さな間違いを見つけるのを助けるでしょうか? – idjaw
'next'と' prev'とは何でしょうか?その条件はどのようにその出力を作りますか? – Sayse
あなたの状態を考えれば、 '[...、[100]、[200]]' –