Креирање листа у Пајтону уз помоћ конструкције list comprehension¶
Листе елемената постоје у многим програмским језицима. Најједноставнији начин да направите листу је да вредности елемената листе наведете ручно, односно да их укуцате. На пример, листа бројева мањих од 20 који су дељиви са 3 може да се дефинише овако:
Што је дужа и сложенија листа, теже нам је да укуцамо податке. Штавише, могућност грешке постаје све већа. Много је боље да овакав једноставан задатак поверимо рачунару, тј. да напишемо програм који ће направити листу. То можемо да урадимо на следећи начин:
Биле су нам потребне четири линије кôда да напишемо програм који прави тражену листу, али тако аутоматизујемо посао. Уместо 21 бисмо могли, на пример, да ставимо 2021. Програм за то би и даље био дуг четири линије, а завршио би посао који бисмо „пешке“ укуцавали пола сата.
Овакав начин креирања листе је уобичајен за све програмске језике. Синтакса може да буде мало другачија, али структура програма мора да буде иста. Пајтон је посебан по томе што има и посебну конструкцију која омогућава да листе креирамо једноставније. Та се конструкција на енглеском зове list comprehension. Она омогућава да цео програм, у поједностављеној варијанти, ставимо унутар угластих заграда и тако у једној линији креирамо листу.
Приметите структуру кôда. У угластим заградама имамо прво израз (i)
чија се вредност придружује листи, па петљу кроз коју се мења вредност
индекса (for i in range(1,21)) и на крају услов који је неопходан да
би се тај елемент придружио листи (if i%3==0). У for петљи не
мора да се појави range() као колекција бројева. Уместо
range(1,21) смо могли да ставимо и листу
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]. Петља би онда
пролазила кроз листу и проверавала да ли се индекс i налази у листи.
Свеједно, први начин је лакши и елегантнији.
Да пробамо сада како ова конструкција ради на једном једноставнијем
примеру. Направићемо листу квадрата свих природних бројева од 1 до 100.
Овде нема услова већ за сваку вредност индекса i листи kvad
придружујемо по једну вредност израза i**2.
Да преведемо шта смо тачно написали у претходној ћелији: листи kvad
придружи квадрат броја i за сваку вредност i од 1 до 100. Ако
вам је до сада то промакло, степен броја у Пајтону се добија помоћу
опратора **. Тако је 5**2 једнако 25, док је 2**3 једнако 8.
Да бисмо проверили шта се налази у листи kvad, одштампаћемо
вредности првих 15 елемената.
- [2, 2, 2, 2]
- Пробај поново!
- [2, 2, 2, 2, 2]
- Пробај поново!
- [0, 2, 4, 6]
- Тачно!
- [0, 2, 4, 6, 8]
- Пробај поново!
Q-5: Нека је list1 = [2 * x for x in range(0, 4)]. Шта ћемо добити ако штампамо list1?
Слично можемо да радимо и са листама у којима су стрингови. Ево једног примера.
Уз помоћ метoде split() смо текст из претходне ћелије (променљива
string) поделили на делове и придружили листи lista.
Сада ћемо уз помоћ Пајтонове конструкције за листе креирати листу која садржи само оне елементе чије вредности имају тачно шест знакова. Можете ли ово да урадите сами?
delovi6=[s for s in delovi if len(s)==6]
print(delovi6)
Користите овај „пајтоновски“ начин креирања листа кад год можете, јер је једноставан и разумљив (а и ефикаснији од експлицитне петље). Провежбајте задатке на ову тему из збирке.
- [x in range(1, 1000) if x%3==0]
- Пробај поново!
- [x for x in range(1000) if x%3==0]
- Тачно!
- [x%3 for x in range(1, 1000)]
- Пробај поново!
- [x%3=0 for x in range(1, 1000)]
- Пробај поново!
Q-6: Који ће од наредних израза издвојити бројеве између 1 и 1000 који су дељиви са 3?