की तरह अन्य जवाब में बताया गया है, आप इसे ऊपर पुनरावृत्ति जबकि सूची में से एक तत्व को हटाना नहीं चाहिए, यह मुद्दों के बहुत सारे करने के लिए नेतृत्व कर सकते हैं। एक अन्य विधि है कि बनाता है एक पूरी तरह से नई सूची होगा -
import datetime
lisdic = [] #list of dictionaries
prev = None
result = []
for i in lisdic:
if not prev:
prev = i
elif prev['end'] == i['begin'] - datetime.timedelta(seconds=1):
prev['end'] = i['end']
else:
result.append(prev)
prev = i
if prev:
result.append(prev)
यह भी कई शब्दकोशों भर में समान अंतराल संभाल हैं (एक उदाहरण नीचे डेमो में सूची में पहले 3 शब्दकोशों जा रहा है)।
डेमो -
>>> import datetime
>>> lisdic = [{"begin":datetime.datetime(2015,10,2,10,0,0),"end":datetime.datetime(2015,10,2,10,30,0)},
... {"begin":datetime.datetime(2015,10,2,10,30,1),"end":datetime.datetime(2015,10,2,11,0,0)},
... {"begin":datetime.datetime(2015,10,2,11,0,1),"end":datetime.datetime(2015,10,2,12,0,0)},
... {"begin":datetime.datetime(2015,10,3,10,0,0),"end":datetime.datetime(2015,10,3,10,30,0)},
... {"begin":datetime.datetime(2015,10,3,11,0,0),"end":datetime.datetime(2015,10,3,11,30,0)},
... {"begin":datetime.datetime(2015,10,4,12,0,0),"end":datetime.datetime(2015,10,2,12,10,0)}]
>>> prev = None
>>> result = []
>>> for i in lisdic:
... if not prev:
... prev = i
... elif prev['end'] == i['begin'] - datetime.timedelta(seconds=1):
... prev['end'] = i['end']
... else:
... result.append(prev)
... prev = i
...
>>>
>>> if prev:
... result.append(prev)
...
>>> pprint.pprint(result)
[{'begin': datetime.datetime(2015, 10, 2, 10, 0),
'end': datetime.datetime(2015, 10, 2, 12, 0)},
{'begin': datetime.datetime(2015, 10, 3, 10, 0),
'end': datetime.datetime(2015, 10, 3, 10, 30)},
{'begin': datetime.datetime(2015, 10, 3, 11, 0),
'end': datetime.datetime(2015, 10, 3, 11, 30)},
{'begin': datetime.datetime(2015, 10, 4, 12, 0),
'end': datetime.datetime(2015, 10, 2, 12, 10)}]
और तुम कैसे पिछले एक आसान बनाने होगा? –
http://stackoverflow.com/questions/5434891/iterate-a-list-as-pair-current-next-in-python –
इससे आपको बहुत मदद मिलेगी। अन्यथा, उस सूची की प्रतिलिपि पर पुनरावृत्ति करें अन्यथा, आप सूची को पुन: करते समय अगली बार हटा नहीं सकते ;-) –