Выманне, замена і трансфармацыя пэўных элементаў спісаў (масіўаў) 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]

Выраз прымяняецца да элемента, які задавальняе ўмоўнаму выразу ітэрацыйнага аб’екта (напрыклад, спісу або картэжа) і становіцца элементам новага спісу. Умоўны выраз «if» можна апусціць, і ў гэтым выпадку выраз прымяняецца да ўсіх элементаў.

Глядзіце наступны артыкул для больш падрабязнай інфармацыі, у тым ліку абазначэння разумення ўкладзеных спісаў.

Прымяніць працэс да ўсіх элементаў спісу

Напрыклад, калі вы хочаце прымяніць некаторую апрацоўку да ўсіх элементаў спісу, апішыце патрэбную апрацоўку ў выразе разумення спісу вышэй.

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