Есептер
Көптеген бағдарламалар жеке айнымалылармен емес, айнымалылар жиынымен жұмыс істейді. Мысалы, бағдарлама оқушылар тізімін пернетақтадан немесе файлдан оқу арқылы сыныптағы оқушылар туралы ақпаратты өңдей алады, бірақ сыныптағы оқушылар санын өзгерту бағдарламаның бастапқы кодын өзгертуді қажет етпеуі керек.
Бұрын бізде тізбектің элементтерін өңдеу міндеті тұрды, мысалы, тізбектің ең үлкен элементін есептеу. Бірақ сонымен бірге біз компьютер жадына барлық сандарды сақтамадық. Дегенмен, көптеген тапсырмаларда бүкіл дәйектілікті сақтау қажет, мысалы, егер дәйектіліктің барлық элементтерін өсу ретімен көрсету керек болса («тізбекті сұрыптау»).
Мұндай деректерді сақтау үшін Python тілінде тізім деп аталатын типті, деректер құрылымын пайдалануға болады (бағдарламалау тілдерінің көпшілігінде басқа термин, «массив» қолданылады). Тізім – жолдағы таңбалар сияқты 0-ден бастап нөмірленген элементтер тізбегі. Тізімді тізімнің элементтерін төртбұрышты жақшаға қою арқылы көрсетуге болады, мысалы:
Primes
тізімінде 6 элемент бар, атап айтқанда: Primes[0] == 2
, Primes[1] == 3
, Primes[2] == 5
, Primes[3] == 7
, Primes[4] == 11
, Primes [5] == 13
. Rainbow
тізімі әрқайсысы жол болып табылатын 7 элементтен тұрады.
Жолдағы таңбалар сияқты, тізім элементтерін соңынан теріс сандармен индекстеуге болады, мысалы, Primes[-1] == 13
, Primes[-6] == 2
.
Тізімнің ұзындығын, яғни ондағы элементтердің санын len
функциясының көмегімен табуға болады, мысалы, len(Primes) == 6
.
Жолдардан айырмашылығы, тізім элементтері оларға жаңа мәндер тағайындау арқылы өзгертілуі мүмкін.
Тізімдерді құрудың және оқудың бірнеше жолдарын қарастырайық. Ең алдымен бос тізім жасауға болады (құрамында элементтер жоқ, ұзындығы 0) және append
әдісі арқылы тізімнің соңына элементтер қосуға болады. Мысалы, бағдарлама кіріс ретінде тізімдегі элементтердің n
санын, содан кейін тізімнің n
элементтерін жеке жолда бір-бірден қабылдасын. Міне, осы пішімдегі енгізу деректерінің мысалы:
5
1809
1854
1860
1891
1925
Бұл жағдайда тізімді оқуды келесідей ұйымдастыруға болады:
Бұл мысал бос тізім жасайды, тізімдегі элементтердің санын оқиды, содан кейін тізімнің элементтерін бір-бірден оқиды және оларды тізімнің соңына қосады. n
айнымалысын сақтай отырып, бірдей нәрсені жазуға болады:
Тізімдер үшін келесі әрекеттер толығымен анықталған: тізімді біріктіру (тізімдерді қосу, яғни бір тізімге басқасын қосу) және тізімді қайталау (тізімді санға көбейту). Мысалы:
Нәтижесінде c
тізімі [1, 2, 3, 4, 5]
, ал d
тізімі [4, 5, 4, 5, 4, 5]
тең болады. Бұл тізімдерді оқу процесін басқаша ұйымдастыруға
мүмкіндік береді: біріншіден, тізімнің өлшемін санап, элементтердің қажетті санынан тізім жасаңыз, содан кейін i
айнымалысы бойынша циклды 0 санынан бастап және цикл ішінде ұйымдастырыңыз. Тізімнің i
-ші элементін жаңадан меншіктейміз:
a
тізімінің элементтерін тізім элементтерінің айналасында төртбұрышты жақшаларды және тізім элементтері арасындағы үтірлерді басып шығаратын жалғыз print(a)
операторымен басып шығаруға болады. Бұл шығу ыңғайсыз, жиі тізімнің барлық элементтерін бір жолға немесе бір жолға бір элементті көрсету керек. Міне, циклді ұйымдастыруда да ерекшеленетін екі мысал:
Мұнда i
элементінің индексі циклде өзгертіледі, содан кейін i
индексі бар тізім элементі көрсетіледі.
Бұл мысалда тізім элементтері бос орынмен бөлінген бір жолда көрсетіледі, ал циклде тізім элементінің индексі емес, айнымалының өзі өзгереді (мысалы, for elem in ['red', 'green', 'blue']
elem
айнымалы ретімен 'red'
, 'green'
, 'blue'
мәндерін қабылдайды.
Соңғы мысалға ерекше назар аударыңыз! Python идеологиясының өте маңызды бөлігі - тізбектің барлық элементтерін қайталаудың ыңғайлы әдісін қамтамасыз ететін for
циклі. Бұл Python мен Паскаль арасындағы айырмашылық, Python-да элементтердің өзін теруге мүмкіндік бар.
Жолдан барлық сандарды таңдап, оларды массивке сандар ретінде қосу қажет жағдайда for
циклін қолдануды көрсететін мысал келтірейік.
Тізім элементтерін бір жолға енгізуге болады, бұл жағдайда бүкіл жолды input()
>функциясы ретінде қарастыруға болады. Содан кейін жолдың split()
әдісін қолдануға болады, ол бастапқы жол бос орынға бөліктерге бөлінген жағдайда алынатын жолдар тізімін қайтарады. Мысалы:
Бұл бағдарламаны іске қосу кезінде 1 2 3
жолын енгізсеңіз, онда а
тізімі ['1', '2', '3']
тең болады. Тізім сандардан емес, жолдардан тұратынын ескеріңіз. Егер сандар тізімін алғыңыз келсе, тізімнің элементтерін бір-бірден сандарға түрлендіруге болады:
Арнайы Python магиясын - генераторларды пайдалану - дәл сол нәрсені бір жолда жасауға болады:
Бұл кодтың қалай жұмыс істейтіні келесі бөлімде түсіндіріледі. Егер нақты сандар тізімін оқу қажет болса, онда int түрін float
түрімен ауыстыру керек.
split()
әдісінде тізім элементтері арасында бөлгіш ретінде қолданылатын жолды көрсететін қосымша параметр бар. Мысалы, split('.')
функциясын шақыру бастапқы жолды '.'
таңбаларына бөлу арқылы алынған тізімді қайтарады:
Python тілінде бір жолды пәрмен арқылы жолдарды тізімдей аласыз. Ол үшін жолды join
әдісі пайдаланылады. Бұл әдістің бір параметрі бар: жолдар тізімі. Нәтижесінде, берілген тізімнің элементтерін бір жолға біріктіру арқылы алынған жол қайтарылады, ал тізім элементтері арасына әдіс қолданылатын жолға тең бөлгіш енгізіледі. Алдыңғы сөйлемді бірінші рет түсінбегеніңізді білеміз. Сондықтан мысалдарды қараңыз:
Егер тізім сандардан тұрса, онда генераторлардың қара сиқырын қолдануға тура келеді. Сандар тізімінің элементтерін бос орындармен бөліп көрсетуге болады, мысалы:
Дегенмен, егер сіз қараңғы сиқырдың жанкүйері болмасаңыз, онда сіз for
циклінің көмегімен бірдей әсерге қол жеткізе аласыз.
Бірдей элементтермен толтырылған тізім жасау үшін тізімді қайталау операторын пайдалануға болады, мысалы:
Күрделі формулалармен толтырылған тізімдерді жасау үшін сіз генераторларды пайдалана аласыз: тізімді белгілі бір формуламен толтыруға мүмкіндік беретін өрнектер. Генератордың жалпы көрінісі келесідей:
[өрнек for айнымалы in реттілік]
мұндағы айнымалы
– кейбір айнымалының идентификаторы, реттілік
– бұл айнымалы қабылдайтын мәндер тізбегі (бұл тізім, жол немесе range
функциясының көмегімен алынған нысан болуы мүмкін), өрнек
әдетте қолданылатын айнымалыға байланысты кейбір өрнек болып табылады. тізім элементтері болатын генератор толтырылады.
Мұнда генераторларды пайдаланудың кейбір мысалдары берілген.
Сондай-ақ генераторды пайдаланып n
нөлден тұратын тізім жасауға болады:
Бүтін квадраттармен толтырылған тізімді келесідей жасауға болады:
Тізімді 1-ден n-ге дейінгі сандар квадраттарымен толтыру қажет болса, range
функциясының параметрлерін range(1, n + 1)
өзгертуге болады:
1-ден 9-ға дейінгі кездейсоқ сандармен толтырылған тізімді осылай алуға болады (random
модульден randrange
функциясын пайдалану):
Және бұл мысалда тізім стандартты енгізуден оқылатын жолдардан тұрады: алдымен тізім элементтерінің санын енгізу керек (бұл мән range
функциясына аргумент ретінде пайдаланылады), содан кейін - көрсетілген жолдар саны. :
Тізімдер арқылы жолдар сияқты кесінділер жасауға болады. Атап айтқанда:
j-i
элементтерінің A[i:j]
кесіндісі A[i]
, A[i+1]
, ..., A[j-1]
.
A[i:j:-1]
i-j
элементтерінің кесіндісі A[i]
, A[i-1]
, ..., A[j+1]
(яғни элементтердің реті өзгереді).
k
қадамы бар A[i:j:k]
кесіндісі: A[i]
, A[i+k]
, A[i+2*k]
,... . Егер k<0
болса, онда элементтер қарама-қарсы орналасады.
i
немесе j
сандарының әрқайсысы болмауы мүмкін, бұл «жолдың басы» немесе «жолдың соңы» дегенді білдіреді
Тізімдер, жолдардан айырмашылығы, өзгермелі нысандар: тізімнің жеке элементіне жаңа мән тағайындауға болады. Бірақ сіз барлық бөлімдерді өзгерте аласыз. Мысалы:
Нәтижесінде A[2:4]
кесіндісінің екі элементінің орнына үш элементтен тұратын жаңа тізім енгізілген тізім пайда болады. Енді тізім [1, 2, 7, 8, 9, 5]
тең.
Нәтижесінде тізім шығады [40, 2, 30, 4, 20, 6, 10]
. Мұнда A[::-2] - 10
, 20
, 30
мәндері тағайындалған A[-1]
, A[-3]
, A[-5]
, A[-7]
элементтерінің тізімі, тиісінше 40.
Үздіксіз кесіндіге (яғни, 1-ден басқа k
қадамы бар кесіндіге) жаңа мән тағайындалса, онда ескі және жаңа кесіндідегі элементтердің саны бірдей болуы керек, әйтпесе ValueError
орын алады.
A[i]
кесінді емес, тізім элементі екенін ескеріңіз!
Тізімдермен көптеген әртүрлі операцияларды оңай орындауға болады.
X in A |
Элементтің тізімде бар-жоғын тексеріңіз. True немесе False мәнін қайтарады |
X not in A |
not(x in A) |
min(A) |
тізімнің ең кіші элементі |
max(A) |
Тізімнің ең үлкен элементі |
A.index(x) |
Тізімдегі x элементінің бірінші пайда болуының индексі, егер ол жоқ болса, ол ValueError ерекше жағдайын жасайды |
A.count(x) |
Тізімдегі x элементінің қайталану саны |