Advertisement
furas

Python - split list

Apr 8th, 2017
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.64 KB | None | 0 0
  1. '''
  2. === split_list_1 ===
  3.  
  4. data: [2, 3, 4, 8, 9, 10, 33, 34]
  5. part: 0 2 [2, 3, 4]
  6. part: 3 5 [8, 9, 10]
  7. part: 6 6 [33, 34]
  8. result: [[2, 3, 4], [8, 9, 10], [33, 34]]
  9. ---
  10. data: [2, 3, 4]
  11. part: 0 1 [2, 3, 4]
  12. result: [[2, 3, 4]]
  13. ---
  14. UnboundLocalError: local variable 'i' referenced before assignment
  15.  
  16. === split_list_2 ===
  17.  
  18. data: [2, 3, 4, 8, 9, 10, 33, 34]
  19. part: [2, 3, 4]
  20. part: [8, 9, 10]
  21. part: [33, 34]
  22. result: [[2, 3, 4], [8, 9, 10], [33, 34]]
  23. ---
  24. data: [2, 3, 4]
  25. part: [2, 3, 4]
  26. result: [[2, 3, 4]]
  27. ---
  28. data: []
  29. result: []
  30. ---
  31. '''
  32.  
  33. def split_list_1(data):
  34.     results = []
  35.    
  36.     start = 0
  37.     for i in range(len(data)-1):
  38.         if data[i+1] - data[i] > 1 :
  39.             print('part:', start, i, data[start:i+1])
  40.             results.append(data[start:i+1])
  41.             start = i+1
  42.    
  43.     print('part:', start, i, data[start:])
  44.     results.append(data[start:])
  45.    
  46.     return results
  47.  
  48. def split_list_2(data):
  49.     results = []
  50.    
  51.     while data:
  52.         # move first element from data to part
  53.         part = [data.pop(0)]
  54.        
  55.         # if there is next element (while data)
  56.         # and next-prev==1 (data[0] - part[-1] == 1)
  57.         # then move from data to part
  58.         while data and data[0] - part[-1] == 1:
  59.             part.append(data.pop(0))
  60.            
  61.         print('part:', part)
  62.         results.append(part)
  63.        
  64.     return results
  65.  
  66. # --- tests ----
  67.  
  68. tests = [
  69.     [2,3,4,8,9,10,33,34],
  70.     [2,3,4],
  71.     [], # split_list_1() doesn't pass this test
  72. ]    
  73.  
  74. for data in tests:
  75.     print('data:', data)
  76.     result = split_list_2(data)
  77.     print('result:', result)
  78.     print('---')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement