1
我有一個列表,它看起來像這樣: 每個元組都有一個名字,啓動,停止和方向:拆分基於元組的值元組的列表
major_list = [('a',20,30,-1),('b',31,40,-1),('c',41,50,-1),('d',51,60,+1),('z',90,100,-1),('e',61,70,+1),('f',71,80,+1)]
這就需要分割像此:
[[('a',20,30,-1),('b',31,40,-1),('c',41,50,-1)],[('d',51,60,+1)],[('z',90,100,-1)],[('e',61,70,+1),('f',71,80,+1)]]
有兩個規則分裂列表: 1)如果ABS(開始 - 停止)相鄰的元組之間的> 20,使一個新的列表[OR] 2)如果相鄰元組具有相反的方向說('c',41,50,-1),('d',51,60,+ 1),做一個新的「C」
這裏後列表是我到目前爲止有:
SplitList = []
for i,tup in enumerate(major_List):
if i != len(major_List)-1:
if i == 0:
tmp_list = []
next_tup = major_List[i+1]
if (abs(int(next_tup[1]) - int(tup[2])) > 20) or (next_tup[3] != tup[3]):
tmp_list.append(tup)
if tmp_list:
SplitList.append(tmp_list)
tmp_list = []
else:
tmp_list.append(tup)
出於某種原因SplitList在末端插入一個空的列表,我想不出什麼我做錯了。是否有更多pythonic方法來做同樣的事情?
讓我看看我正確地理解了這個問題:你需要一個帶有兩個列表的列表:第一個列表的方向爲-1,第二個列表的方向爲+1的對象? – 2014-11-04 21:51:03
否根據規則(其中2個)原始列表將被拆分成子列表;因此結果列表將是各種列表的列表 – user2998764 2014-11-04 21:56:26