Π Π°Π·Π½ΠΎΠ΅

Python sort lambda: sorting — How to sort with lambda in Python

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key стандартной сортировки

Π£ стандартной сортировки (ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sort списка, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sorted) Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ задания
порядка сортировки ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° key. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Β  нСкоторая функция, которая вызываСтся
для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта, ΠΏΠ΅Ρ€Π΅Π΄ сравнСниСм этих элСмСнтов: элСмСнты списка ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ
Π½Π΅ значСния элСмСнтов, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ этого элСмСнта.

НапримСр, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°Π½ список строк, содСрТащих Ρ†ΠΈΡ„Ρ€Ρ‹, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ элСмСнты списка, сравнивая
ΠΈΡ…, ΠΊΠ°ΠΊ числа, Π° Π½Π΅ ΠΊΠ°ΠΊ строки. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

a = ["10", "20", "30", "1", "2", "3", "111", "112", "222"]
a.sort(key=int)

Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаётся функция int, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для сравнСния элСмСнтов,
ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Π²ΠΈΠ΄Π΅ int(a[i]) < int(a[j]). ВмСсто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ int ΠΌΠΎΠΆΠ½ΠΎ
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (элСмСнт массива) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅,
Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ a.sort(key=len), Ρ‚ΠΎ строки Π±ΡƒΠ΄ΡƒΡ‚ упорядочСны ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅.

Π’ слоТных случаях Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°Π½ список чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ
ΠΏΠΎ послСднСй Ρ†ΠΈΡ„Ρ€Π΅. НапишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послСднюю Ρ†ΠΈΡ„Ρ€Ρƒ числа:

def last_digit(n):
    return n % 10

a.sort(key=last_digit)

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСстС с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ reverse.

Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ,
Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ порядок сортировки, Ρ‡Ρ‚ΠΎ захламляСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ функциями.
Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: β€œΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠΊΡ†Π½ΠΈΠΈ,
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слова def, прямо ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ сортировки.
Лямбда-функция — это функция, которая состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ строки с инструкциСй
return, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ функция сразу Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².
Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

lambda список ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²: Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

НапримСр, ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список чисСл ΠΏΠΎ послСднСй Ρ†ΠΈΡ„Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

a = [3, 15, 22, 13, 12, 32, 45, 43]
a.sort(key=lambda n: n % 10)

Рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡƒΡΡ‚ΡŒ Π΄Π°Π½ список Ρ‚ΠΎΡ‡Π΅ΠΊ, каТдая Ρ‚ΠΎΡ‡ΠΊΠ°: ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· Π΄Π²ΡƒΡ… чисСл.
НапримСр, [(3, -2), (7, 1), (0, 4)]. Π­Ρ‚ΠΎΡ‚ список Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ
расстояния ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ. НапишСм лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

a.sort(key=lamda point: point[0] ** 2 + point[1] ** 2)

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ списка ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ этим ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ
по индСксам [0] и [1].

Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ сортировки

ВСрнёмся ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ сортировки ΠΏΠΎ послСднСй Ρ†ΠΈΡ„Ρ€Π΅. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅
упорядочСнный список Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

[22, 12, 32, 3, 13, 43, 15, 45]

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ свойство устойчивости сортировки: функция сортировки Π½Π΅ пСрСставлят
элСмСнты, Ссли ΠΎΠ½ΠΈ Ρ€Π°Π²Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС функция упорядочиваСт числа ΠΏΠΎ послСднСй Ρ†ΠΈΡ„Ρ€Π΅,
Π° ΠΏΡ€ΠΈ Ρ€Π°Π²Π½ΠΎΠΉ послСднСй Ρ†ΠΈΡ„Ρ€Π΅ сохраняСтся порядок слСдования элСмСнтов Π² исходном спискС: 22, 12, 32.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ сортировку, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ нСсколько ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π²? НапримСр,
ΠΏΡ€ΠΈ Ρ€Π°Π²Π½ΠΎΠΉ послСднСй Ρ†ΠΈΡ„Ρ€Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ элСмСнты Π² порядкС возрастания самих чисСл.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· Π΄Π²ΡƒΡ… чисСл: послСднСй
Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ самого числа. ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² лСксикографичСском порядкС, поэтому ΠΏΡ€ΠΈ равСнствС остатка
ΠΎΡ‚ дСлСния Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ сами числа.

a.sort(key=lambda n: (n % 10, n))

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ: Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒΡŽ сортировки. ΠžΡ‚ΡΡ‚ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ список сначала ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ
чисСл, Π° Π·Π°Ρ‚Π΅ΠΌΒ β€” ΠΏΠΎ послСднСй Ρ†ΠΈΡ„Ρ€Π΅. Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ Ρ€Π°Π²Π½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ послСднСй Ρ†ΠΈΡ„Ρ€Ρ‹ сохранится
Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ порядок.

a.sort()
a.sort(key=lambda n: n % 10)

Π’ΠΎ Π΅ΡΡ‚ΡŒ сортировку ΠΏΠΎ \(k\) ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ (Ссли ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ элСмСнты Ρ€Π°Π²Π½Ρ‹, Ρ‚ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ
ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ, Ссли Ρ€Π°Π²Π½Ρ‹ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‚ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΏΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ ΠΈ Ρ‚.Π΄.) ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° \(k\)
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сортировок, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС (ΠΎΡ‚ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΌΡƒ).

Ѐункция operator.itemgetter

ΠŸΡ€ΠΈ сортировкС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ частой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ являСтся сортировка
ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. НапримСр, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΏΠΎ элСмСнту с индСксом 1, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

a.sort(key=lambda elem: elem[1])

Для удобства Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ operator Π΅ΡΡ‚ΡŒ функция itemgetter,
которая позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, функция Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

def itemgetter(i):
    return lambda elem: elem[i]

Π’ΠΎ Π΅ΡΡ‚ΡŒ operator.itemgetter(i)Β β€” это функция, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚ числового ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°
создаётся лямдба-функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° key. Если Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ itemgetter
ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚ΠΎ получСнная функция Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· элСмСнтов с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ индСксами.

сортировка списков ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ .sort() с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ β€” простыми словами / Π₯Π°Π±Ρ€

Поводом ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ пост стало Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ списков (массивов) Π² Python я Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ Π² сСти Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ простого описания ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сортировки элСмСнтов с использованиСм ΠΊΠ»ΡŽΡ‡Π°: list.sort(key=…).

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, это ΠΌΠ½Π΅ Ρ‚Π°ΠΊ Π½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ ΠΈ я Π΄ΠΎΠ»Π³ΠΎ понимаю простыС для всСх Π²Π΅Ρ‰ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ привСдСнная Π½ΠΈΠΆΠ΅ информация Π±ΡƒΠ΄Π΅Ρ‚ вСсьма ΠΏΠΎΠ»Π΅Π·Π½Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ питонистам, ΠΊΠ°ΠΊ ΠΈ я сам.

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΈ состоит ΠΎΠ½ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… строк Ρ€Π°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

sortList = ['a', 'сс', 'bbb']

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° элСмСнтов массива ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ .sort() производится ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ лСксикографичСски β€” ΠΏΡ€ΠΎΡ‰Π΅ говоря, Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ мСньшСго значСния ΠΊ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ:

sortList.sort()

Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅:

>>> ['a', 'bbb', 'cc']

Однако ΠΌΠ΅Ρ‚ΠΎΠ΄ .sort() позволяСт Π½Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΈ порядок сортировки.

Для измСнСния ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° сортировки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово key, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ стало доступным начиная с вСрсии Python 2.4.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш список двумя способами: 1. Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС; 2. ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ сортировка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° key:

sortList = ['a', 'cc', 'bbb']

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ «Π²Π½Π΅ΡˆΠ½ΡŽΡŽ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС:

def sortByAlphabet(inputStr):

Β Β Β Β Β Β Β Β return inputStr[0] # ΠšΠ»ΡŽΡ‡ΠΎΠΌ являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС, сортируСм ΠΏΠΎ Π½Π΅ΠΌΡƒ

# Вторая функция, ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ список ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки:

def sortByLength(inputStr):

Β Β Β Β Β Β Β Β return len(inputStr) # ΠšΠ»ΡŽΡ‡ΠΎΠΌ являСтся Π΄Π»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, сортируСм ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅

print u’Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ список: ‘, sortList # >>> [‘a’, ‘cc’, ‘bbb’]

sortList.sort(key=sortByAlphabet) # ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива пСрСдаСтся Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

print u’ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС: ‘, sortList # >>> [‘a’, ‘bbb’, ‘cc’]

sortList.sort(key=sortByLength) # ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива пСрСдаСтся Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

print u’ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки: ‘, sortList # >>> [‘a’, ‘cc’, ‘bbb’]

# Π’Π΅ΠΏΠ΅Ρ€ΡŒ отсортируСм ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки, Π½ΠΎ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС:

sortList.sort(key=sortByLength, reverse=True) # Π’ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС

print u’ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки, Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС: ‘, sortList # >>> [‘bbb’, ‘cc’, ‘a’]

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ .sort() ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ дСйствия с исходным списком, пСрСставляя элСмСнты Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ самого, ΠΈ НЕ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ копию исходного списка. Для получСния отсортированной ΠΊΠΎΠΏΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ sorted:

newList = sorted(sortList)

β€” Π»ΠΈΠ±ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½ΠΎ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ key (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ описанному Π²Ρ‹ΡˆΠ΅):

newList = sorted(sortList, key=sortByLength)

Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .sorted() Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π½ΠΎ ΠΌΠ½Π΅ ΠΎΠ½ΠΈ показались Π½Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ для ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π°.

синтаксис, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ~ PythonRu

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python. На самом Π΄Π΅Π»Π΅, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ ΠΈ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда.

Лямбда-функция Π² Python β€” это просто функция Python. Но это Π½Π΅ΠΊΠΈΠΉ особСнный Ρ‚ΠΈΠΏ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ возмоТностями. Если Π΅ΡΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС, Ρ‚ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ посвящСна lambda.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда Π² Python?

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ понятия лямбда Π² Python, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ являСтся обычная функция Python Π½Π° Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

Для этого потрСбуСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅. Как Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, всС Π² Python являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ запускаСм эту ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ строку ΠΊΠΎΠ΄Π°

x = 5

БоздаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Python Ρ‚ΠΈΠΏΠ° int, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сохраняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5. x ΠΆΠ΅ являСтся символом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚ΠΈΠΏ x ΠΈ адрСс, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ ссылаСтся. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ type ΠΈ id.

>>> type(x)
<class 'int'>
>>> id(x)
4308964832

Π’ ΠΈΡ‚ΠΎΠ³Π΅ x ссылаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° int, Π° располоТСн ΠΎΠ½ ΠΏΠΎ адрСсу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Ρ€Π½ΡƒΠ»Π° функция id.

ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ ΠΊΠ°Π½Π°Π»Ρ‹

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈ понятно.

А Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

>>> def f(x):
...     return x * x
...

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ type ΠΈ id ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° f.

>>> def f(x):
...     return x * x
...
>>> type(f)
<class 'function'>
>>> id(f)
4316798080

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Π² Python Π΅ΡΡ‚ΡŒ класс function, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ опрСдСлСнная функция f β€” это Π΅Π³ΠΎ экзСмпляр. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ x Π±Ρ‹Π» экзСмпляром класса integer. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎ функциях ΠΌΠΎΠΆΠ½ΠΎ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π Π°Π·Π½ΠΈΡ†Π° лишь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ хранят Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” ΠΊΠΎΠ΄.

Π­Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΠΌ функциям ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ функция f пСрСдаСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

def f(x):
    return x * x

def modify_list(L, fn):
    for idx, v in enumerate(L):
        L[idx] = fn(v)

L = [1, 3, 2]
modify_list(L, f)
print(L)


ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ этот ΠΊΠΎΠ΄, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ дальшС.

Π˜Ρ‚Π°ΠΊ, modify_list β€” это функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список L ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fn Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ список элСмСнт Π·Π° элСмСнтом ΠΈ примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ….

Π­Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ способ измСнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² списка, вСдь ΠΎΠ½ позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая займСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π’Π°ΠΊ, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ modify_list Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ станСт список, Π³Π΄Π΅ всС значСния Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚.

Но ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ, которая ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ список Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° с основами Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, стоит ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ лямбда. Лямбда Π² Python β€” это просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python:

lambda arguments: expression

Лямбда ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ), Π½ΠΎ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ присвоСна функция. НапримСр, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

>>> f = lambda x: x * x
>>> type(f)
<class 'function'>

Но Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: Π° Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ссли ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ? Но Π½Π° самом Π΄Π΅Π»Π΅, ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ лишь Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Π° одноразовая функция. Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌΠΈ. И, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ дальшС, Π΅ΡΡ‚ΡŒ масса ситуаций, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½ΡƒΠΆΠ½Ρ‹.

Лямбда с нСсколькими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΎΠ΄Π½ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π½Π΅ составляСт Ρ‚Ρ€ΡƒΠ΄Π°.

>>> f = lambda x: x * x
>>> f(5)
25

А Ссли ΠΈΡ… Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ нСсколько, Ρ‚ΠΎ достаточно лишь Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ значСния запятыми. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½Π° функция, которая Π±Π΅Ρ€Π΅Ρ‚ Π΄Π²Π° числовых Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅.

>>> f = lambda x, y: x * y
>>> f(5, 2)
10

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! А ΠΊΠ°ΠΊ насчСт лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²?

Лямбда-функция Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Допустим, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², которая Π±Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° True. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

>>> f = lambda: True
>>> f()
True

НСсколько лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ вопрос: Π° ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк.

ΠžΡ‚Π²Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½: Π½Π΅Ρ‚.

Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python всСгда ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Если ΠΆΠ΅ ΠΈΡ… нСсколько, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим самыС распространСнныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Лямбда-функция ΠΈ map

РаспространСнная опСрация со списками Π² Python β€” ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту.

map() β€” это встроСнная функция Python, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ примСняСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΅ΡΡ‚ΡŒ список Ρ†Π΅Π»Ρ‹Ρ… чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ возвСсти Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ map.

>>> L = [1, 2, 3, 4]
>>> list(map(lambda x: x**2, L))
[1, 4, 9, 16]

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Python3 функция map Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Map, Π° Π² Python2 β€” список.

Π’Π°ΠΊ, вмСсто опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΅Π΅ Π² map Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбда для быстрого опрСдСлСния Π΅Π΅ прямо Π²Π½ΡƒΡ‚Ρ€ΠΈ. Π’ этом Π΅ΡΡ‚ΡŒ смысл, Ссли упомянутая функция большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ΄Π΅.

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Лямбда-функция ΠΈ filter

filter() β€” это Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° встроСнная функция, которая Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, функция filter ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, списка) Π½Π° основС ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ критСрия. ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ опрСдСляСтся Π·Π° счСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Она ΠΆΠ΅ примСняСтся ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Если Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” True, элСмСнт остаСтся. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” отклоняСтся. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True для Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл ΠΈ False β€” для Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ…:

def even_fn(x):
  if x % 2 == 0:
    return True
  return False

print(list(filter(even_fn, [1, 3, 2, 5, 20, 21])))


Π‘ лямбда-функциями это всС ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ максимально сТато. Код Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΉ, написанный Π² ΠΎΠ΄Π½Ρƒ строку.

print(list(filter(lambda x: x % 2 == 0, [1, 3, 2, 5, 20, 21])))

И Π² этом сила лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Лямбда-функция ΠΈ сортировка списков

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка β€” базовая опСрация Π² Python. Если Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ спискС чисСл ΠΈΠ»ΠΈ строк, Ρ‚ΠΎ процСсс максимально простой. ΠŸΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sort ΠΈ sorted.

Но ΠΈΠ½ΠΎΠ³Π΄Π° имССтся список кастомных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π° основС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key Π² sort ΠΈΠ»ΠΈ sorted. Он ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Ѐункция примСняСтся ΠΊΠΎ всСм элСмСнтам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Ρ‚ΠΎ, Π½Π° основС Ρ‡Π΅Π³ΠΎ выполнится сортировка. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π•ΡΡ‚ΡŒ класс Employee.

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим экзСмпляры этого класса ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΡ… Π² список.

Alex = Employee('Alex', 20)
Amanda = Employee('Amanda', 30)
David = Employee('David', 15)
L = [Alex, Amanda, David]

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° основС поля age сотрудников. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для этого:

L.sort(key=lambda x: x.age)
print([item.name for item in L])

Лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ использовано Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° key вмСсто ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΅Π΅ опрСдСлСния ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sort.

ΠŸΠ°Ρ€Π° слов ΠΎ выраТСниях ΠΈ инструкциях

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, лямбда ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (expression) Π² Ρ‚Π΅Π»Π΅.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ Π½Π΅ ΠΎΠ± инструкции (statement).

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ инструкции β€” Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… часто ΠΏΡƒΡ‚Π°ΡŽΡ‚ΡΡ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ инструкциСй являСтся строка ΠΊΠΎΠ΄Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Π½ΠΎ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

НапримСр, инструкция if ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ for ΠΈ while ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ инструкций. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ попросту Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

А Π²ΠΎΡ‚ выраТСния β€” это значСния. Запросто ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС выраТСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° значСния, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

НапримСр:

  • 3 + 5 β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 8
  • 10 > 5 β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ True
  • True and (5 < 3) β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ False

Π’Π΅Π»ΠΎ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π²Π΅Ρ€Π½Π΅Ρ‚. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ это для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с лямбда-функциями Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

сортировка списков ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ .sort() с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ β€” простыми словами / Habr

Поводом ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ пост стало Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ списков (массивов) Π² Python я Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ Π² сСти Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ простого описания ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сортировки элСмСнтов с использованиСм ΠΊΠ»ΡŽΡ‡Π°: list.sort(key=…).

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, это ΠΌΠ½Π΅ Ρ‚Π°ΠΊ Π½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ ΠΈ я Π΄ΠΎΠ»Π³ΠΎ понимаю простыС для всСх Π²Π΅Ρ‰ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ привСдСнная Π½ΠΈΠΆΠ΅ информация Π±ΡƒΠ΄Π΅Ρ‚ вСсьма ΠΏΠΎΠ»Π΅Π·Π½Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ питонистам, ΠΊΠ°ΠΊ ΠΈ я сам.

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΈ состоит ΠΎΠ½ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… строк Ρ€Π°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

sortList = ['a', 'сс', 'bbb']

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° элСмСнтов массива ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ .sort() производится ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ лСксикографичСски β€” ΠΏΡ€ΠΎΡ‰Π΅ говоря, Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ мСньшСго значСния ΠΊ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ:

sortList.sort()

Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅:

>>> ['a', 'bbb', 'cc']

Однако ΠΌΠ΅Ρ‚ΠΎΠ΄ .sort() позволяСт Π½Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΈ порядок сортировки.

Для измСнСния ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° сортировки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово key, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ стало доступным начиная с вСрсии Python 2.4.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш список двумя способами: 1. Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС; 2. ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ сортировка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° key:

sortList = ['a', 'cc', 'bbb']

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ «Π²Π½Π΅ΡˆΠ½ΡŽΡŽ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС:

def sortByAlphabet(inputStr):

Β Β Β Β Β Β Β Β return inputStr[0] # ΠšΠ»ΡŽΡ‡ΠΎΠΌ являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС, сортируСм ΠΏΠΎ Π½Π΅ΠΌΡƒ

# Вторая функция, ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ список ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки:

def sortByLength(inputStr):

Β Β Β Β Β Β Β Β return len(inputStr) # ΠšΠ»ΡŽΡ‡ΠΎΠΌ являСтся Π΄Π»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, сортируСм ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅

print u’Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ список: ‘, sortList # >>> [‘a’, ‘cc’, ‘bbb’]

sortList.sort(key=sortByAlphabet) # ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива пСрСдаСтся Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

print u’ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС: ‘, sortList # >>> [‘a’, ‘bbb’, ‘cc’]

sortList.sort(key=sortByLength) # ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива пСрСдаСтся Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

print u’ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки: ‘, sortList # >>> [‘a’, ‘cc’, ‘bbb’]

# Π’Π΅ΠΏΠ΅Ρ€ΡŒ отсортируСм ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки, Π½ΠΎ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС:

sortList.sort(key=sortByLength, reverse=True) # Π’ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС

print u’ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строки, Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС: ‘, sortList # >>> [‘bbb’, ‘cc’, ‘a’]

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ .sort() ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ дСйствия с исходным списком, пСрСставляя элСмСнты Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ самого, ΠΈ НЕ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ копию исходного списка. Для получСния отсортированной ΠΊΠΎΠΏΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ sorted:

newList = sorted(sortList)

β€” Π»ΠΈΠ±ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½ΠΎ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ key (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ описанному Π²Ρ‹ΡˆΠ΅):

newList = sorted(sortList, key=sortByLength)

Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .sorted() Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π½ΠΎ ΠΌΠ½Π΅ ΠΎΠ½ΠΈ показались Π½Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ для ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π°.

Лямбда-ΠΊΠ»ΡŽΡ‡

ΠΈ сортировка Π² Python

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° КАК — докумСнтация Python 3.8.6

Автор

Π­Π½Π΄Ρ€ΡŽ Π”Π°Π»ΠΊΠ΅ ΠΈ Π Π°ΠΉΠΌΠΎΠ½Π΄ Π₯Π΅Ρ‚Ρ‚ΠΈΠ½Π³Π΅Ρ€

Выпуск

0,1

Бписки Python ΠΈΠΌΠ΅ΡŽΡ‚ встроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ list.sort () , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСняСт список
Π½Π° мСстС. Π’Π°ΠΊΠΆΠ΅ имССтся встроСнная функция sorted () , которая создаСт Π½ΠΎΠ²Ρ‹ΠΉ
отсортированный список ΠΈΠ· ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ.

Π’ этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΌΡ‹ исслСдуСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сортировки Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python.

ΠžΡΠ½ΠΎΠ²Ρ‹ сортировки

ΠŸΡ€ΠΎΡΡ‚Π°Ρ сортировка ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΎΡ‡Π΅Π½ΡŒ проста: достаточно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sorted () . Π­Ρ‚ΠΎ
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ отсортированный список:

 >>> отсортировано ([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
 

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ list.sort () . Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ список
Π½Π° мСстС (ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ НСт , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ
Ρ‡Π΅ΠΌ sorted () — Π½ΠΎ Ссли Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ исходный список, ΠΎΠ½ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ
Π±ΠΎΠ»Π΅Π΅ эффСктивным.

 >>> a = [5, 2, 3, 1, 4]
>>> a.sort ()
>>> Π°
[1, 2, 3, 4, 5]
 

Π”Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ list.sort () ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для
списки. Напротив, функция sorted () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ.

 >>> отсортировано ({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1, 2, 3, 4, 5]
 

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

И list.sort (), ΠΈ sorted () ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ key для указания
функция, вызываСмая для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта списка ΠΏΠ΅Ρ€Π΅Π΄ сравнСниСм.

НапримСр, здСсь сравнСниС строк Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра:

 >>> sorted ("Π­Ρ‚ΠΎ тСстовая строка ΠΎΡ‚ Π­Π½Π΄Ρ€ΡŽ" .split (), key = str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
 

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° key Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.
ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ для использования Π² цСлях сортировки. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ быстр, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ
ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ функция вызываСтся Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ записи.

РаспространСнным шаблоном являСтся сортировка слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с использованиСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… индСксов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ΠΈ.НапримСр:

 >>> student_tuples = [
... ('john', 'A', 15),
... ('Π”ΠΆΠ΅ΠΉΠ½', 'B', 12),
... ('Дэйв', 'B', 10),
...]
>>> sorted (student_tuples, key = lambda student: student [2]) # ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ возрасту
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
 

Π’ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ. НапримСр:

 >>> класс Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚:
... def __init __ (я, имя, класс, возраст):
... self.name = имя
... сСбя.ΠΎΡ†Π΅Π½ΠΊΠ° = ΠΎΡ†Π΅Π½ΠΊΠ°
... self.age = возраст
... def __repr __ (сам):
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ repr ((self.name, self.grade, self.age))
 
 >>> student_objects = [
... Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ ('john', 'A', 15),
... Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ΠΊΠ° ('Π”ΠΆΠ΅ΠΉΠ½', 'B', 12),
... Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ ('dave', 'B', 10),
...]
>>> sorted (student_objects, key = lambda student: student.age) # ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ возрасту
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
 

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ модуля ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅, ΠΎΡ‡Π΅Π½ΡŒ распространСны, поэтому Python прСдоставляСт
ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для упрощСния ΠΈ ускорСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.Π’
ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ itemgetter () ,
attrgetter () ΠΈ функция methodcaller () .

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ становятся ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ быстрСС:

 >>> ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° import itemgetter, attrgetter
 
 >>> отсортировано (Π½Π°Π±ΠΎΡ€Ρ‹ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², ΠΊΠ»ΡŽΡ‡ = itemgetter (2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
 
 >>> отсортировано (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-ΡƒΡ‡Π΅Π½ΠΈΠΊΠΈ, ΠΊΠ»ΡŽΡ‡ = attrgetter ('возраст'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
 

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ опСраторского модуля ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ сортировки.НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹
ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ классу Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎ возрасту :

 >>> отсортировано (Π½Π°Π±ΠΎΡ€Ρ‹ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², ΠΊΠ»ΡŽΡ‡ = itemgetter (1,2))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
 
 >>> отсортировано (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-ΡƒΡ‡Π΅Π½ΠΈΠΊΠΈ, ΠΊΠ»ΡŽΡ‡ = attrgetter ('ΠΎΡ†Π΅Π½ΠΊΠ°', 'возраст'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
 

По Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΈ ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ

Оба list.sort () ΠΈ sorted () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с
логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.Π­Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ сортировки ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ
Π΄Π°Π½Π½Ρ‹Π΅ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС возраст порядок:

 >>> отсортировано (Π½Π°Π±ΠΎΡ€Ρ‹ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², ΠΊΠ»ΡŽΡ‡ = itemgetter (2), ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ = True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
 

.

Лямбда-сортировка Π² Python 3

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

Загрузка…

  1. ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
    Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ

  2. Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ сообщСство

    • ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

      ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅
      Π±ΠΎΠ»Ρ‚Π°Ρ‚ΡŒ

    • ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°-стСка

.

Как ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ 2-ΠΌΡƒ элСмСнту с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π° — thispointer.com

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудим, ΠΊΠ°ΠΊ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ 2-ΠΉ ΠΈΠ»ΠΈ i-ΠΉ элСмСнт ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ слов ΠΈ ΠΈΡ… частота,

 # Бписок ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Ρ‚.Π΅. слово ΠΈ Π΅Π³ΠΎ частота
wordFreq = [('the', 34), ('at', 23), ('should', 1), ('from', 3)] 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ sort () Π² этом спискС i.Π΅.

 ''
По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ функция sort () сортируСт список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.
'' '
wordFreq.sort () 

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ отсортируСт Π΅Π³ΠΎ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Ρ‚.Π΅.

 [('at', 23), ('from', 3), ('should', 1), ('the', 34)] 

Но Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ счСтчик частоты, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ

 ('should', 1)
('ΠΎΡ‚', 3)
('Π²', 23)
('the', 34) 

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ,

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для сортировки списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΈΠ»ΠΈ i-ΠΌΡƒ элСмСнту Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ наш настраиваСмый ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ i.Π΅. ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ функция Π² sort (),

 wordFreq.sort (key = KeyFunction ()) 

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Π°Ρ функция?

ΠŸΡ€ΠΈ сортировкС списка всС элСмСнты списка Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Но ΠΏΠ΅Ρ€Π΅Π΄ сравнСниСм ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, какая Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ элСмСнта ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для сравнСния элСмСнтов Π² спискС ΠΏΡ€ΠΈ сортировкС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ 2-ΠΌΡƒ элСмСнту, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚.Π΅.

 '' '
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
'' '
wordFreq.sort (key = lambda elem: elem [1]) 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ содСрТимоС списков Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

 [('слСдуСт', 1), ('ΠΎΡ‚', 3), ('Π²', 23), ('the', 34)] 

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с использованиСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π°

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ· Π½Π΅Π³ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт i.Π΅.

 ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ def (tupleElem):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ tupleElem [1] 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΈ сортировкС списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Ρ‚.Π΅.

 '' '
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π°
'' '
wordFreq.sort (ΠΊΠ»ΡŽΡ‡ = ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€) 

Он отсортируСт список ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Ρ‚.Π΅.

 [('Π΄ΠΎΠ»ΠΆΠ΅Π½', 1), ('ΠΎΡ‚', 3), ('Π²', 23), ('the', 34)] 

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

 def ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ (tupleElem):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ tupleElem [1]

def main ():

    # Бписок ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ i.Π΅. слово ΠΈ Π΅Π³ΠΎ частота
    wordFreq = [('the', 34), ('at', 23), ('should', 1), ('from', 3)]

    # Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (wordFreq)

    print ("Бписок сортировки ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°")
    
    '' '
    По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ функция sort () сортируСт список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.
    '' '
    wordFreq.sort ()
    
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (wordFreq)
    
    print ("Бписок сортировки ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°")
        
    '' '
    Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
    '' '
    wordFreq.sort (key = lambda elem: elem [1])
    
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (wordFreq)
    
    '' '
    Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π°
    '' '
    wordFreq.sort (ΠΊΠ»ΡŽΡ‡ = ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€)
    
    # Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (wordFreq)
    
    
Ссли __name__ == '__main__':
    Π³Π»Π°Π²Π½Ρ‹ΠΉ()

 

Π’Ρ‹Π²ΠΎΠ΄:

 [('the', 34), ('at', 23), ('should', 1), ('from', 3)]
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°
[('at', 23), ('from', 3), ('should', 1), ('the', 34)]
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΏΠΎ 2-ΠΌΡƒ элСмСнту ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°
[('Π΄ΠΎΠ»ΠΆΠ΅Π½', 1), ('ΠΎΡ‚', 3), ('Π²', 23), ('Π²', 34)]
[('Π΄ΠΎΠ»ΠΆΠ΅Π½', 1), ('ΠΎΡ‚', 3), ('Π²', 23), ('Π²', 34)] 

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *