如果我理解你correclty,你想根據另一個列表(假設是一個長度相同的列表)以這樣一種方式拆分一個列表,即在另一個列表中重複元素定義切片應該發生的位置。一個'優雅',但不是最高性能的方法是迭代通過n
大小的其他列表的切片,並檢查當前索引是否爲all(nan_list[i:i+n])
- 如果是,請將該索引之前的第一個列表中的所有內容作爲切入您的結果,然後跳過n
地點並重復該過程。然而,我寧願一個程序的方法:
def split_list(source, nan_data, nan_len=6):
result = [] # a list for our final result
last_pos = 0 # holds the last sliced position
counter = 0 # a counter for sequential NaNs
for i, is_nan in enumerate(nan_data):
if not is_nan: # encountered a non-NaN, check how many consecutive NaNs we had
if counter >= nan_len: # we have a match...
result.append(source[last_pos:i-counter]) # add a new slice to our result
last_pos = i # set the new slice position
counter = 0 # reset the counter
else:
counter += 1 # NaN found, increase the counter
# find the last slice, if any
left_over = source[last_pos:] if counter < nan_len else source[last_pos:-counter]
if left_over:
result.append(left_over)
return result # return the result
然後你可以用它來分割基於nan_len
連續True
值(或計算結果爲真實的任何值)在nan_data
列表中的任何source
列表,例如:
base_list = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]
nan_list = [True, False, True, False, True, True, True, True, True, True,
False, True, False, True, True, False, True, True, True, False]
print(split_list(base_list, nan_list, 3))
# [['01', '02', '03', '04'], ['11', '12', '13', '14', '15', '16'], ['20']]
難道你不覺得粘貼代碼比描述代碼好嗎? –
請格式化您的問題:使用段落,使用示例,...您想閱讀這樣的問題嗎? –
對不起,是否更清楚一點? –