Екі өлшемді массив



бет1/3
Дата02.10.2023
өлшемі23,99 Kb.
#112694
  1   2   3

Екі өлшемді массив
Жиі тапсырмаларда деректермен тікбұрышты кестелерді сақтау керек. Мұндай кестелер матрицалар немесе екі өлшемді массивтер деп аталады. Бағдарламалау тілінде Питон кестені жолдар тізімі ретінде ұсынуға болады, оның әрбір элементі өз кезегінде тізім болып табылады, мысалы, сандар. Мысалы, екі жол мен үш бағаннан сандық кестені жасауға болады:

A = [[1, 2, 3], [4, 5, 6]]


Мұнда тізімнің бірінші жолы [0] [1, 2, 3] сандардың тізімі болып табылады. Яғни A[0][0] == 1, мәні A[0][1] == 2, A[0][2] == 3, A[1][0] == 4, A[1][1] == 5, A[1][2] == 6.
Тізімді өңдеу және шығару үшін әдетте екі ішкі цикл қолданылады. Бірінші цикл жол нөмірі бойынша, екінші цикл жол ішіндегі элементтер бойынша. Мысалы, екі өлшемді сандық тізімді экранға әр жол сайын шығарып, бір жолдың ішіндегі Бос орындар санын бөлісе аласыз:

for i in range(len(A)):


for j in range(len(A[i]):
print(A[i][j], end=' ')
print()
Бірдей, бірақ циклдер индекс бойынша емес, тізімнің мәндері бойынша:

for row in A:


for elem in row:
print(elem, end=' ')
print()
Әрине, бір жолды шығару үшін join әдісін қолдануға болады:

for row in A:


print(' '.join(list(map(str, row))))
Тізімдегі барлық сандардың сомасын есептеу үшін екі ішкі циклді қолданамыз:

S = 0
for i in range(len(A)):


for j in range(len(A[i])):
S += A[i][j]
Немесе циклмен бірдей индекс бойынша емес, жолдардың мәндері бойынша:

S = 0
for row in A:


for elem in row:
S += elem
Ішкі тізімдерді жасау
Екі Сан берілсін: n жолдар саны және M бағандарының саны.
Айқын шешім дұрыс емес:

# Қате
A = [[0] * m] * n


A[0][0] элементіне 1 мәнін тағайындау, содан кейін басқа элементтің мәнін көрсету оңайA[1][0] — ол да 1-ге тең болады! Өйткені [0] * m сілтемесін m нөлге қайтарады. Бірақ осы элементтің келесі қайталануы бірдей тізімге сілтеме болатын N элементтердің тізімін жасайды (дәл сол сияқты B операциясын орындау = A тізімдер үшін жаңа тізімді жасамайды), сондықтан нәтиже тізімінің барлық жолдары бірдей жол болып табылады.
Осылайша, екі өлшемді тізімді бір жолды қайталау операциясы арқылы жасауға болмайды. Не істеу керек?
Бірінші әдіс: алдымен n элементтердің тізімін жасаңыз (тек n нөлдерден бастау үшін). Содан кейін тізімнің әрбір элементін m элементтерінен басқа бір өлшемді тізімге сілтеме жасайық:

A = [0] * n


for i in range(n):
A[i] = [0] * m
Басқа (бірақ ұқсас) әдіс: бос тізімді жасау, содан кейін n рет тізім-жол болып табылатын жаңа элементті қосу:

A = []
for i in range(n):


A.append([0] * m)
Бірақ генераторды пайдалану оңай: әрқайсысы m нөлден тұратын тізім болатын n элементтердің тізімін жасау:

A = [[0] * m for i in range(n)]


Бұл жағдайда әрбір элемент қалғандарына қарамастан жасалады (тізімнің келесі элементін толтыру үшін [0] * m тізімі қайта құрастырылады), сол тізімге сілтемелер көшірілмейді.


Достарыңызбен бөлісу:
  1   2   3




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет