Advertisement
cmiN

list split

Jun 28th, 2012
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.40 KB | None | 0 0
  1. #! /usr/bin/env python
  2. # Ideea nu e prea dificila ...
  3. # deoarece nu avem pointeri vom aloca etichete
  4. # catre diferite bucati de memorie extrase din lista initiala.
  5. # Algoritmul este liniar iar complexitatea este cat lungimea listei:
  6. # pentru fiecare segmentare se citesc elementele alocate bucatii respective
  7. # apoi se citesc restul elementelor necitite, intotdeauna mai putine decat
  8. # valoarea segmentarii, asemenea lui D = I * C + R de la mate xD.
  9.  
  10. elem = range(1, 10) # lista cu elemente [1, 2, ..., 9]
  11. chunks = list() # lista cu bucati (adica cu alte liste)
  12. seg = 6 # in cate bucati o segmentam
  13. lgt = len(elem) / seg # lungimea unei bucati
  14.  
  15. # acum generam cele `seg` bucati
  16. for i in xrange(seg):
  17.     chunks.append(elem[lgt * i:lgt * (i + 1)])
  18.  
  19. lgt *= seg # acum `lgt` inseamna cate elemente am distribuit
  20. # trebuie sa distribuim si elementele de la [lgt:] asta daca mai sunt
  21. # daca nu mai sunt va rezulta o lista goala deci nu-i problema
  22. pos = 0 # pozitia de pe care incepe extinderea
  23. for x in elem[lgt:]:
  24.     chunks[pos].append(x)
  25.     pos += 1
  26. # astfel elementele ramase sunt distribuite in balans
  27. # iar diferenta absoluta dintre oricare 2 seturi de ipuri nu va fi mai mare de 1
  28. # nu-ti face griji daca imparti o lista de A elemente in B bucati
  29. # unde B > A, vor rezulta B liste goale si in primele A liste din cele B
  30. # se vor adauga "restul" de A elemente
  31.  
  32. for chunk in chunks:
  33.     print chunk
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement