Щоб створити новий список у Python шляхом вилучення або видалення лише тих елементів існуючого списку (масиву), які задовольняють певним умовам, або шляхом заміни чи перетворення, використовуйте осмислення списків.
Нижче пояснюється тут разом із прикладом коду.
- Основна форма позначення розуміння списку
- Застосуйте процес до всіх елементів списку
- Витягуйте та видаляйте зі списку елементи, які відповідають критеріям
- Замінити або перетворити елементи, які задовольняють умовам списку
Перегляньте наступну статтю для конкретних прикладів списків рядків.
Також можна випадковим чином витягувати елементи, які не відповідають критеріям.
Зауважте, що списки можуть зберігати різні типи даних і суворо відрізняються від масивів. Якщо ви хочете обробляти масиви в процесах, які вимагають розміру пам’яті та адрес пам’яті або чисельної обробки великих даних, використовуйте масив (стандартна бібліотека) або NumPy.
Наведений нижче список є прикладом
l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Основна форма позначення розуміння списку
Під час генерування нового списку зі списку простіше написати розуміння списку, ніж цикли for.
[expression for any variable name in iterable object if conditional expression]
Вираз застосовується до елемента, який задовольняє умовному виразу ітераційного об’єкта (наприклад, списку або кортежу) і стає елементом нового списку. Умовний вираз «if» можна опустити, і в цьому випадку вираз застосовується до всіх елементів.
Дивіться наступну статтю, щоб отримати докладнішу інформацію, включно з позначенням розуміння вкладеного списку.
- ПОВ’ЯЗАНІ:Як використовувати списки Python
Застосуйте процес до всіх елементів списку
Наприклад, якщо ви хочете застосувати деяку обробку до всіх елементів списку, опишіть бажану обробку у виразі для розуміння списку вище.
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]