Python тізімдерінің (массивтердің) белгілі бір элементтерін шығарып алу, ауыстыру және түрлендіру

Іскерлік

Белгілі бір шарттарды қанағаттандыратын бар тізімнің (массивтің) элементтерін ғана алу немесе жою арқылы немесе ауыстыру немесе түрлендіруді орындау арқылы Python бағдарламасында жаңа тізім жасау үшін тізімді түсінуді пайдаланыңыз.

Төменде үлгі кодымен бірге мұнда түсіндіріледі.

  • Тізімді түсіну белгісінің негізгі түрі
  • Процесті тізімнің барлық элементтеріне қолданыңыз
  • Шарттарға сәйкес келетін тізімнен элементтерді шығарып алыңыз және жойыңыз
  • Тізім шарттарын қанағаттандыратын элементтерді ауыстырыңыз немесе түрлендіріңіз

Жолдар тізімдерінің нақты мысалдары үшін келесі мақаланы қараңыз.

Сондай-ақ критерийлерге сәйкес келмейтін элементтерді кездейсоқ түрде шығаруға болады.

Тізімдер деректердің әртүрлі түрлерін сақтай алатынын және массивтерден қатаң айырмашылығы бар екенін ескеріңіз. Жад өлшемі мен жад мекенжайларын немесе үлкен деректерді сандық өңдеуді қажет ететін процестерде массивтерді өңдеуді қаласаңыз, массив (стандартты кітапхана) немесе NumPy пайдаланыңыз.

Төмендегі тізім мысал болып табылады

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Тізімді түсіну белгісінің негізгі түрі

Тізімнен жаңа тізім жасаған кезде, тізімді түсіну циклдерге қарағанда оңай жазылады.

[expression for any variable name in iterable object if conditional expression]

Өрнек қайталанатын нысанның (тізім немесе кортеж сияқты) шартты өрнегін қанағаттандыратын және жаңа тізімнің элементіне айналатын элементке қолданылады. «Егер шартты өрнекті» алып тастауға болады, бұл жағдайда өрнек барлық элементтерге қолданылады.

Қосымша мәліметтерді, соның ішінде кірістірілген тізімді түсіну белгісін алу үшін келесі мақаланы қараңыз.

Процесті тізімнің барлық элементтеріне қолданыңыз

Мысалы, тізімнің барлық элементтеріне кейбір өңдеуді қолданғыңыз келсе, жоғарыдағы тізімді түсіну өрнегінде қалаған өңдеуді сипаттаңыз.

l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']

Бұл сандар тізімдері мен жолдар тізімдері арасында түрлендіру үшін пайдаланылуы мүмкін.

Шарттарға сәйкес келетін тізімнен элементтерді шығарып алыңыз және жойыңыз

Егер элемент тек шартты өрнек арқылы таңдалса, ол өрнек арқылы өңделмейді, сондықтан ол келесі пішінді алады

[variable name for variable name in original list if conditional expression]

Жаңа тізім жасалады, одан тек шартты қанағаттандыратын элементтер (шартты өрнек шын болатын элементтер) шығарылады.

l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]

l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]

«Егер шартты өрнек» «егер шартты өрнек болмаса» күйіне орнатылса, ол теріске айналады және тек шартты қанағаттандырмайтын элементтерді (шартты өрнек жалған болып табылатын элементтер) таңдап алуға және шығаруға болады. Басқаша айтқанда, шартты қанағаттандыратын элементтер жойылатын жаңа тізім жасалады.

l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Әрине, эквивалентті шартты өрнекті not қолданбай көрсету арқылы бірдей нәтиже алынады.

l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Шартты өрнек бөлігі бірнеше шарттар болуы мүмкін. Теріс белгілерді де қолдануға болады.

l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]

l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]

Тізім шарттарын қанағаттандыратын элементтерді ауыстырыңыз немесе түрлендіріңіз

Жоғарыдағы элементтерді алу мысалында шарттарды қанағаттандырмайтын элементтер жойылды.

Тек шарттарды қанағаттандыратын элементтерде ауыстыруларды, түрлендірулерді және т.б. орындағыңыз келсе, тізімді түсіну белгісінің өрнек бөлігіне үштік операторды қолданыңыз.

Python тілінде үштік операторды келесідей жазуға болады

True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

Бұл біршама күрделі, бірақ тізімді түсіну белгісі мен үштік операторлардың тіркесімі төмендегідей.

[True Value if Conditional Expression else False Value for any variable name in original list]

Жақшаға алынған бөлік үштік оператор болып табылады (нақты кодта жақша қажет емес).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

Кез келген айнымалы атауы ақиқат немесе жалған мәндер үшін жазылғандай жазылса, бастапқы элементтің мәні сол күйінде пайдаланылады. Егер өрнек жазылса, сол өрнекті өңдеу қолданылады.

l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]

l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]

l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]

l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]
Copied title and URL