Π Π°Π·Π½ΠΎΠ΅

Π‘Π»ΠΎΠ²Π°Ρ€Π΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€: ВсС ΠΎ выраТСниях-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… списков, мноТСств ΠΈ словарСй / Π₯Π°Π±Ρ€

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

ВсС ΠΎ выраТСниях-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… списков, мноТСств ΠΈ словарСй / Π₯Π°Π±Ρ€

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠ΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°, посСщСнного Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями. Данная ΡΡ‚Π°Ρ‚ΡŒΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Π°Ρ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒΡΡ ΠΈ Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ изучСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ….

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΈ поэтому ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсна Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ, Π½ΠΎ ΠΈ достаточно ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ.

Π‘ΡƒΠ΄ΡƒΡ‚ рассмотрСны: выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списка, словаря ΠΈ мноТСства, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (5 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²), Ρ€Π°Π±ΠΎΡ‚Π° с enumerate(), range().

А Ρ‚Π°ΠΊΠΆΠ΅: классификация ΠΈ тСрминология, синтаксис, Π°Π½Π°Π»ΠΎΠ³ΠΈ Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ примСнСния.

Π― постарался Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ тонкости ΠΈ Π½ΡŽΠ°Π½ΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΠ²Π΅Ρ‰Π°ΡŽΡ‚ΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΠΎ всСх ΠΊΠ½ΠΈΠ³Π°Ρ… ΠΈ курсах, ΠΈ, Π² Ρ‚ΠΎΠΌ числС, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΡƒΠΆΠ΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Habrahabr ΡΡ‚Π°Ρ‚ΡŒΡΡ… Π½Π° эту Ρ‚Π΅ΠΌΡƒ.

ОглавлСниС:

1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈ классификация.
2. Бинтаксис.
3. Аналоги Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° for ΠΈ Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
4. ВыраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.
5. ГСнСрация стандартных ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.
6. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ частичный ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€.
7. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.
8. ИспользованиС range().
9. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.
10. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Бсылки ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅.

1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈ классификация

1.1 Π§Ρ‚ΠΎ ΠΈ Π·Π°Ρ‡Π΅ΠΌ

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

1.2 ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° использования Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

  • Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ синтаксис, Ρ‡Π΅ΠΌ гСнСрация Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅.
  • Π‘ΠΎΠ»Π΅Π΅ понятный ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ синтаксис Ρ‡Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ map(), filter() ΠΈ lambda.
  • Π’ Ρ†Π΅Π»ΠΎΠΌ: быстрСС Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ, Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, особСнно ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ΄Π΅.

1.3 ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΈ особСнности

Π‘Ρ€Π°Π·Ρƒ скаТу, Ρ‡Ρ‚ΠΎ сущСствуСт нСкоторая тСрминологичСская ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π° Π² русских названиях Ρ‚ΠΎΠ³ΠΎ, ΠΎ Ρ‡Π΅ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ обозначСния:

  • Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ (generator expression) β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π΄Π°Π΅Ρ‚ создаСт Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ.
  • Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ β€” ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка (list comprehension), Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° словаря (dictionary comprehension) ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° мноТСства (set comprehension).

Π’ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… мСстах, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нагромоТдСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Β» Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠΉ.

2. Бинтаксис

Для Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΎΠ±Ρ‰Π΅Π³ΠΎ синтаксиса выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.
Π’Π°ΠΆΠ½ΠΎ: этот синтаксис ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² ΠΈ для выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ для всСх Ρ‚Ρ€Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Ρ€Π°Π·Π½ΠΈΡ†Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, Π² ΠΊΠ°ΠΊΠΈΡ… скобках ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ (смотритС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ).

ΠžΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π²Π°ΠΆΠ½Ρ‹Π΅ для понимания:

  • Π’Π²ΠΎΠ΄ β€” это ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ β€” это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ функция-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, коллСкция β€” любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ Π½Π΅ΠΌΡƒ.
  • УсловиС β€” это Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнт ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ссли элСмСнт Π΅ΠΌΡƒ Π½Π΅ удовлСтворяСт, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½.
  • ЀинальноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ просто Π²Ρ‹Π²ΠΎΠ΄ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

2.1 Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]    # ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ исходный список
list_b = [x for x in list_a]           # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ список ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка
print(list_b)                          # [-2, -1, 0, 1, 2, 3, 4, 5]
print(list_a is list_b)                # False - это Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹!

По сути, Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного Ρ‚ΡƒΡ‚ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, ΠΌΡ‹ просто ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ копию списка. Π”Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΈΠ»ΠΈ просто ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ· Ρ‚ΠΈΠΏΠ° Π² Ρ‚ΠΈΠΏ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² особого смысла Π½Π΅Ρ‚ β€” это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создания ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ (Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈΡΡŒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ†ΠΈΠΊΠ»Π°).

ΠœΠΎΡ‰ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ условия для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ элСмСнта Π² Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выраТСния ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π² Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ).

2.2 ДобавляСм условиС для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

Π’Π°ΠΆΠ½ΠΎ: УсловиС провСряСтся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнты Π΅ΠΌΡƒ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄ΡƒΡ‚ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ условиС β€” Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты.

# if x % 2 == 0 - остаток ΠΎΡ‚ дСлСния Π½Π° 2 Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ - число Ρ‡Π΅Ρ‚Π½ΠΎΠ΅
list_a = [-2, -1, 0, 1, 2, 3, 4, 5] 
list_b = [x for x in list_a if x % 2 == 0]
print(list_b)   # [-2, 0, 2, 4]

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько условий, комбинируя ΠΈΡ… логичСскими ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ:

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
list_b = [x for x in list_a if x % 2 == 0 and x > 0]
# Π±Π΅Ρ€Π΅ΠΌ Ρ‚Π΅ x, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ ΠΈ большС нуля
print(list_b)   # [2, 4]

2.3 ДобавляСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ элСмСнта Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ сам Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния выраТСния с Π½ΠΈΠΌ ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Π’Π°ΠΆΠ½ΠΎ: Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ выполняСтся нСзависимо Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, обрабатывая ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ.

НапримСр, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта:

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
list_b = [x**2 for x in list_a]
print(list_b)   # [4, 1, 0, 1, 4, 9, 16, 25]

Или ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρ‹ строк c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ len()

list_a = ['a', 'abc', 'abcde']
list_b = [len(x) for x in list_a]
print(list_b)   # [1, 3, 5]

2.4 Π’Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ выраТСния

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (начиная с Python 2. 5) Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ if-else для вСтвлСния Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ выраТСния.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС:

  • Условия вСтвлСния ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π½Π΅ послС, Π° ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.
  • Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС if-else это Π½Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ выраТСния, Π° Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ самого выраТСния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ пСрСмСнная ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠ»Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Π½ΠΎ Π² зависимости ΠΎΡ‚ условия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ!
list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
list_b = [x if x < 0 else x**2 for x in list_a]
# Если x-ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ - Π±Π΅Ρ€Π΅ΠΌ x, Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях - Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ x
print(list_b)   # [-2, -1, 0, 1, 4, 9, 16, 25]

Никто Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅:

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
list_b = [x**3 if x < 0 else x**2 for x in list_a if x % 2 == 0]
# Π²Π½Π°Ρ‡Π°Π»Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ пропускаСт Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ значСния
# послС этого Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π² ΠΊΡƒΠ±, Π° для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚
print(list_b)   # [-8, 0, 4, 16]

Π­Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π°

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
list_b = []
for x in list_a:
    if x % 2 == 0:
        if x < 0:
            list_b.append(x ** 3)
        else:
            list_b.append(x ** 2)
print(list_b)   # [-8, 0, 4, 16]

2.5 Π£Π»ΡƒΡ‡ΡˆΠ°Π΅ΠΌ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ

НС Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Python синтаксис позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пСрСносы строк Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ синтаксис Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΌ для чтСния:

numbers = range(10)

# Before
squared_evens = [n ** 2 for n in numbers if n % 2 == 0]

# After
squared_evens = [
    n ** 2
    for n in numbers
    if n % 2 == 0
]

3. Аналоги Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° for ΠΈ Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈ Π±Π΅Π· Π½ΠΈΡ…. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅Ρ… ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ β€” сдСлаСм ΠΈΠ· списка чисСл список ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл ΠΈ Ρ€Π΅ΡˆΠΈΠΌ Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²:

3.

1 РСшСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка

numbers = range(10)
squared_evens = [n ** 2 for n in numbers if n % 2 == 0]
print(squared_evens)   # [0, 4, 16, 36, 64]

3.2. РСшСниС c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for

Π’Π°ΠΆΠ½ΠΎ: ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° for, Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ выраТСния.

numbers = range(10)
squared_evens = []
for n in numbers:
    if n % 2 == 0:
        squared_evens.append(n ** 2)
print(squared_evens)   # [0, 4, 16, 36, 64]

Π’ Ρ†Π΅Π»ΠΎΠΌ, для ΠΎΡ‡Π΅Π½ΡŒ слоТных ΠΈ комплСксных Π·Π°Π΄Π°Ρ‡, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ понятнСй ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ ΠΈ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Для Π±ΠΎΠ»Π΅Π΅ простых Π·Π°Π΄Π°Ρ‡, синтаксис выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π΅ΠΉ ΠΈ Π»Π΅Π³Ρ‡Π΅ Π² Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.

3.3. РСшСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Для Π½Π°Ρ‡Π°Π»Π°, Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ β€” это Ρ‚ΠΎΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ.

МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ старыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅Ρ… ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡, комбинируя map(), lambda ΠΈ filter().

numbers = range(10)
squared_evens = map(lambda n: n ** 2, filter(lambda n: n % 2 == 0, numbers))
print(squared_evens)         # <map object at 0x7f661e5dba20>
print(list(squared_evens))   # [0, 4, 16, 36, 64]
# ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π² Python 2 Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ squared_evens окаТСтся сразу список, Π° Π² Python 3 Β«map objectΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π² список с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ list()

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ, читаСтся ΠΎΠ½ тяТСло ΠΈ использованиС синтаксиса Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ понятным.

4. ВыраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ВыраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (generator expressions) доступны, начиная с Python 2.4. ОсновноС ΠΈΡ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‚ элСмСнт ΠΏΠΎ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π½Π΅ загруТая Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ сразу всю ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ.

UPD: Π•Ρ‰Π΅ Ρ€Π°Π· ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этот ΠΌΠΎΠΌΠ΅Π½Ρ‚: Ссли ΠΌΡ‹ создаСм Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· использования Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‚ΠΎ ΠΎΠ½Π° загруТаСтся Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, соотвСтствСнно, это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ расход памяти Π’Π°ΡˆΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° Π² ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… случаях памяти ΠΌΠΎΠΆΠ΅Ρ‚ просто Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈ Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Β«ΡƒΠΏΠ°Π΄Π΅Ρ‚Β» с MemoryError. Π’ случаС использования выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ происходит, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ элСмСнты ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ обращСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
my_gen = (i for i in list_a)    # Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€
print(next(my_gen))     # -2 - ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°
print(next(my_gen))     # -1 - ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

  1. Π“Π΅Π½Π°Ρ€Π°Ρ‚ΠΎΡ€ нСльзя ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±Π΅Π· скобок β€” это синтаксичСская ошибка.
    # my_gen = i for i in list_a      # SyntaxError: invalid syntax

  2. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ скобки Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    my_sum = sum(i for i in list_a)
    # my_sum = sum((i for i in list_a))  # Ρ‚Π°ΠΊ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ
    print(my_sum)   # 12

  3. НСльзя ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ len()
    # my_len = len(i for i in list_a)  # TypeError: object of type 'generator' has no len()

  4. НСльзя Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ элСмСнты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ print()
    print(my_gen)   # <generator object <genexpr> at 0x7f162db32af0>
    

  5. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ послС прохоТдСния ΠΏΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ ΠΎΠ½ΠΎ остаСтся пустым!
    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    my_gen = (i for i in list_a)
    print(sum(my_gen))  # 12
    print(sum(my_gen))  # 0

  6. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСсконСчным.
    import itertools
    inf_gen = (x for x in itertools.count())  # бСсконСчный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΡ‚ 0 to бСсконСчности!

    Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании «эффСкт» Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΡ‚ бСсконСчного Ρ†ΠΈΠΊΠ»Π°.

  7. К Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ срСзы!
    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    my_gen = (i for i in list_a)
    my_gen_sliced = my_gen[1:3]
    # TypeError: 'generator' object is not subscriptable

  8. Из Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.

5. ГСнСрация стандартных ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

5.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΈΠ· выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΈΠ· выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ list(), tuple(), set(), frozenset()

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠ΅ мноТСство ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ станСт ΡƒΠΆΠ΅ послС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Для строки Ρ‚Π°ΠΊΠΎΠΉ способ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! Бинтаксис создания Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° словаря Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности, ΠΎΠ½ рассмотрСн Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ΄-Ρ€Π°Π·Π΄Π΅Π»Π΅.

  1. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° присвоСнного ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ создания ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.
    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    my_gen = (i for i in list_a)   # Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€
    my_list = list(my_gen) 
    print(my_list)          # [-2, -1, 0, 1, 2, 3, 4, 5]

  2. НаписаниС выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° сразу Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создания ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.
    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    my_list = list(i for i in list_a)
    print(my_list)          # [-2, -1, 0, 1, 2, 3, 4, 5]

    Π’ΠΎ ΠΆΠ΅ самоС для ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, мноТСства ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ мноТСства

    # ΠΊΠΎΡ€Ρ‚Π΅ΠΆ
    my_tuple = tuple(i for i in list_a)
    print(my_tuple)         # (-2, -1, 0, 1, 2, 3, 4, 5)
    
    # мноТСство
    my_set = set(i for i in list_a)
    print(my_set)           # {0, 1, 2, 3, 4, 5, -1, -2}
    
    # Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠ΅ мноТСство
    my_frozenset = frozenset(i for i in list_a)
    print(my_frozenset)     # frozenset({0, 1, 2, 3, 4, 5, -1, -2})

5.2 Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π½Π΅ загруТая всю ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΡ€ΠΈ использовании Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, коллСкция гСнСрируСтся сразу Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

БоотвСтствСнно, вмСсто особСнности Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² пСрСчислСнных Π²Ρ‹ΡˆΠ΅, такая коллСкция Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ всСми стандартными свойствами Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΌΠΈ для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

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

  1. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка (list comprehension)
    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    my_list = [i for i in list_a]
    print(my_list)          # [-2, -1, 0, 1, 2, 3, 4, 5]


    НС ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ…!

    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    my_list = [(i for i in list_a)]
    print(my_list)          # [<generator object <genexpr> at 0x7fb81103bf68>]

  2. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ мноТСства (set comprehension)
    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    my_set= {i for i in list_a}
    print(my_set)       # {0, 1, 2, 3, 4, 5, -1, -2} - порядок случаСн

  3. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря (dictionary comprehension)

    ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ словаря

    dict_abc = {'a': 1, 'b': 2, 'c': 3, 'd': 3}
    dict_123 = {v: k for k, v in dict_abc.items()}
    print(dict_123)  # {1: 'a', 2: 'b', 3: 'd'}
                     # ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΌΡ‹ потСряли "с"! Π’Π°ΠΊ ΠΊΠ°ΠΊ значСния Π±Ρ‹Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹, 
                     # Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ стали ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ.


    Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ· списка:

    list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
    dict_a = {x: x**2 for x in list_a}
    print(dict_a)   # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, -2: 4, -1: 1, 5: 25}

    Π’Π°ΠΆΠ½ΠΎ! Π’Π°ΠΊΠΎΠΉ синтаксис создания словаря Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСльзя, для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ синтаксис (Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ longclaps Π·Π° подсказку Π² коммСнтариях):

    # dict_gen = (x: x**2 for x in list_a)      # SyntaxError: invalid syntax
    dict_gen = ((x, x ** 2) for x in list_a)    # ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°-выраТСния для словаря
    # dict_a = dict(x: x**2 for x in list_a)    # SyntaxError: invalid syntax
    dict_a = dict((x, x ** 2) for x in list_a)  # ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ синтаксиса ΠΎΡ‚ @longclaps

5.3 ГСнСрация строк

Для создания строки вмСсто синтаксиса Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ строки . join(), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.
ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ для объСдинСния Π² строку Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ строками!

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ прямо Π² .join() ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ приводя элСмСнты ΠΊ строковому Ρ‚ΠΈΠΏΡƒ
my_str = ''.join(str(x) for x in list_a)
print(my_str)  # -2-1012345

6. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ частичный ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€

6.1 Π Π°Π±ΠΎΡ‚Π° с enumerate()

Иногда Π² условиях Π·Π°Π΄Π°Ρ‡ΠΈ Π² условии-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅ Π½ΡƒΠΆΠ½Π° Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° значСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта, Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΡƒΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт.

Для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ enumerate(), Π·Π°Π΄Π°ΡŽΡ‰ΡƒΡŽ счСтчик ΠΏΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² Ρ†ΠΈΠΊΠ»Π΅:

for i, x in enumerate(iterable)

здСсь x β€” Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт i β€” Π΅Π³ΠΎ порядковый Π½ΠΎΠΌΠ΅Ρ€, начиная с нуля

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с индСксами:

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
list_d = [(i, x) for i, x in enumerate(list_a)]
print(list_d)   # [(0, -2), (1, -1), (2, 0), (3, 1), (4, 2), (5, 3), (6, 4), (7, 5)]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ β€” Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ списка ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт ΠΈΠ· исходного списка:

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
list_e = [x for i, x in enumerate(list_a, 1) if i % 3 == 0]
print(list_e)   # [0, 3]

Π’Π°ΠΆΠ½Ρ‹Π΅ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ enumerate():

  1. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ enumerate():
    • enumerate(iterator) Π±Π΅Π· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° считаСт с 0.
    • enumerate(iterator, start) β€” Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ с значСния start. Π£Π΄ΠΎΠ±Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ с 1, Π° Π½Π΅ 0.

  2. enumerate() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· порядкового Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈ значСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ΠšΠΎΡ€Ρ‚Π΅ΠΆ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ двумя способами:
    • (i, j) for i, j in enumerate(iterator) β€” скобки Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ°Ρ€Π΅ Π½ΡƒΠΆΠ½Ρ‹!
    • pair for pair in enumerate(mylist) β€” ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ сразу с ΠΏΠ°Ρ€ΠΎΠΉ

  3. Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ для всСх ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… элСмСнтов, Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° ΠΏΡ€ΠΎΡˆΠ»ΠΈ ΠΎΠ½ΠΈ Π² дальнСйшСм условиС ΠΈΠ»ΠΈ Π½Π΅Ρ‚!
    first_ten_even = [(i, x) for i, x in enumerate(range(10)) if x % 2 == 0]
    print(first_ten_even)   # [(0, 0), (2, 2), (4, 4), (6, 6), (8, 8)]

  4. Ѐункция enumerate() Π½Π΅ обращаСтся ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π° просто Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ счСтчик ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… элСмСнтов, поэтому Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для нСупорядочСнных ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… индСксации.
  5. Если ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ количСство элСмСнтов Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎ enumerate() счСтчику (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ if i < 10), Ρ‚ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ всС Ρ€Π°Π²Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² случаС ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ рСсурс-Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ. РСшСниС этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ рассматриваСтся Π½ΠΈΠΆΠ΅ Π² ΠΏΠΎΠ΄-Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ части ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎΒ».

6.2 ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ части ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ.

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Π° ΠΈΠ· ΠΎΡ‡Π΅Π½ΡŒ большой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ бСсконСчного Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… элСмСнтов, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΡ… ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ.

Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с условиСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ enumerate() индСксу ΠΈΠ»ΠΈ срСз ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π½Π°ΠΌ Π² любом случаС придСтся ΠΏΡ€ΠΎΠΉΡ‚ΠΈ всю ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° это ΡƒΠΉΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… рСсурсов.

Π’Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ islice() ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° itertools.

import itertools
first_ten = (itertools.islice((x for x in range(1000000000) if x % 2 == 0), 10))
print(list(first_ten))  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Для ΡΠΎΠΌΠ½Π΅Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ: провСряСм врСмя выполнСния

import time
import itertools

# На Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ с ΠΌΠ°Π»Ρ‹ΠΌ количСством элСмСнтов
start_time = time.time()
first_ten = (itertools.islice((x for x in range(100) if x % 2 == 0), 10))
print(list(first_ten))  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
elapsed_time = time.time() - start_time
print(elapsed_time)  # 3.409385681152344e-05

# На Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ с ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ количСством элСмСнтов
start_time = time.time()
first_ten = (itertools.islice((x for x in range(100000000) if x % 2 == 0), 10))
print(list(first_ten))  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
elapsed_time = time.time() - start_time
print(elapsed_time)  # 1.1205673217773438e-05

# Π’ΠΎ Π΅ΡΡ‚ΡŒ максимальноС количСство элСмСнтов Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ range() ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΈ Π½Π° 6 порядков, 
# Π° врСмя исполнСния ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ порядка

7. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Рассмотрим Π±ΠΎΠ»Π΅Π΅ комплСксныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈΠ»ΠΈ сами выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π’ΡƒΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², со своими особСнностями ΠΈ сфСрой примСнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, рассмотрим ΠΈΡ… ΠΏΠΎ-ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π° послС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΎΠ±Ρ‰ΡƒΡŽ схСму.

7.1 Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΡƒΡŽ структуру.

Π’Π°ΠΆΠ½ΠΎ! ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ порядок слСдования инструкций for in Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ (слСва-Π½Π°ΠΏΡ€Π°Π²ΠΎ), ΠΊΠ°ΠΊ ΠΈ Π² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π±Π΅Π· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ†ΠΈΠΊΠ»Π°Ρ… (свСрху-Π²Π½ΠΈΠ·)! Π’ΠΎΠΆΠ΅ справСдливо ΠΈ ΠΏΡ€ΠΈ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… уровнях влоТСнности.

7.1.1 Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ for Π³Π΄Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈΠ΄ΡƒΡ‚ ΠΏΠΎ нСзависимым ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис: [expression for x in iter1 for y in iter2]
ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΡƒΡŽ структуру, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

НапримСр, создадим ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ΠΈ, Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ² для Π½Π°Ρ‡Π°Π»Π° Π΅Π³ΠΎ значСния нулями.

rows = 1, 2, 3
cols = 'a', 'b'
my_dict = {(col, row): 0 for row in rows for col in cols}
print(my_dict)  # {('a', 1): 0, ('b', 2): 0, ('b', 3): 0, ('b', 1): 0, ('a', 3): 0, ('a', 2): 0}

Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ значСния ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡ…

my_dict['b', 2] = 10   # Π·Π°Π΄Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ-ΠΊΠΎΡ€Ρ‚Π΅ΠΆΡƒ
print(my_dict['b', 2])   # 10 - ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ-ΠΊΠΎΡ€Ρ‚Π΅ΠΆΡƒ

Π’ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ условиями-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅:

rows = 1, 2, 3, -4, -5
cols = 'a', 'b', 'abc'
# Для наглядности разнСсСм Π½Π° нСсколько строк
my_dict = {
    (col, row): 0  # ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт состоит ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π°-ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ знаСчния
    for row in rows if row > 0   # Волько ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния
    for col in cols if len(col) == 1  # Волько ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅
    }
print(my_dict)  # {('a', 1): 0, ('b', 2): 0, ('b', 3): 0, ('b', 1): 0, ('a', 3): 0, ('a', 2): 0}

Π­Ρ‚Π° ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ΅Π½Π½Π°Ρ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°

rows = 1, 2, 3, -4, -5
cols = 'a', 'b', 'abc'
my_dict = {}
for row in rows:
    if row > 0:
        for col in cols:
            if len(col) == 1:
                my_dict[col, row] = 0
print(my_dict)  # {('a', 1): 0, ('b', 2): 0, ('b', 3): 0, ('b', 1): 0, ('a', 3): 0, ('a', 2): 0}

7.

2))
# ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ совсСм Π½Π΅ рСкомСндуСтся ΠΊ использованию для Ρ‚Π°ΠΊΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ

7.2 Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΠΊΠ»Ρ‹ for Π²Π½ΡƒΡ‚Ρ€ΠΈ выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½ΠΎ ΠΈ сами Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ примСняСтся ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ структуру.

Π’Π°ΠΆΠ½ΠΎ!: Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π²Ρ‹ΡˆΠ΅ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ, для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Π½Π°Ρ‡Π°Π»Π΅ обрабатываСтся внСшний Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΠΎΡ‚ΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ порядок ΠΈΠ΄Π΅Ρ‚ справа-Π½Π°Π»Π΅Π²ΠΎ.

НиТС рассмотрим Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ использования.

7.2.1 β€” Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° β€” двумСрная ΠΈΠ· Π΄Π²ΡƒΡ… ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ…

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис: [[expression for y in iter2] for x in iter1]
ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ структуру, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· 5 столбцов ΠΈ 3 строк ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π΅ нулями:

w, h = 5, 3  # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высотку ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹
matrix = [[0 for x in range(w)] for y in range(h)]
print(matrix)   # [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ этой ΠΆΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ двумя Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ — ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° порядок влоТСния

matrix = []
for y in range(h):
    new_row = []
    for x in range(w):
        new_row.append(0)
    matrix.append(new_row)
print(matrix)   # [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ПослС создания ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ ΠΊΠ°ΠΊ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом

# Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ значСния ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ (ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ - индСксы Π² спискС списков)
matrix[0][0] = 1
matrix[1][3] = 3
print(matrix)   # [[1, 0, 0, 0, 0], [0, 0, 0, 3, 0], [0, 0, 0, 0, 0]]

# ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ
x, y = 1, 3
print(matrix[x][y])  # 3

7.2.2 β€” Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° β€” двумСрная ΠΈΠ· Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис: [[expression for y in x] for x in iterator]
ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…, сохраняя Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ структуру.

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ:

matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

Π’ΠΎΠ·Π²Π΅Π΄Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚:

squared = [[cell**2 for cell in row] for row in matrix]
print(squared)    # [[1, 4, 9, 16], [25, 36, 49, 64], [81, 100, 121, 144]]

Π­Ρ‚Π° ΠΆΠ΅ опСрация Π² Π²ΠΈΠ΄Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ²

squared = []
for row in matrix:
    new_row = []
    for cell in row:
        new_row.append(cell**2)
    squared.append(new_row)
print(squared)    # [[1, 4, 9, 16], [25, 36, 49, 64], [81, 100, 121, 144]]

ΠžΠ±ΠΎΠ±Ρ‰ΠΈΠΌ всС Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ схСмС (ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡƒ):

7.3 β€” Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ

Π’Π°ΠΊ ΠΊΠ°ΠΊ любой Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Ρ†ΠΈΠΊΠ»Π΅ for, это Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ для создания Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ.
ΠŸΡ€ΠΈ этом синтаксичСски это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π΄Π²Π° выраТСния ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ ΠΈ Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

Допустим Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚Π°ΠΊΠΈΡ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списков:

list_a = [x for x in range(-2, 4)]    # Π’Π°ΠΊ сдСлано для дальнСйшСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° синтаксиса, 
                                      # ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ досточно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ range(-2, 4)
list_b = [x**2 for x in list_a]

Π’ΠΎΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π² ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, подставив вмСсто list_a Π΅Π³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка:

list_c = [x**2 for x in [x for x in range(-2, 4)]]
print(list_c)  # [4, 1, 0, 1, 4, 9]

UPD ΠΎΡ‚ longclaps: ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ ΠΎΡ‚ комбинирования Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ слоТной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f(x) = u(v(x))

list_c = [t + t ** 2  for t in (x ** 3 + x ** 4 for x in range(-2, 4))]

8. ИспользованиС range()

Говоря ΠΎ способах Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, нСльзя ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ range(), которая ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для создания арифмСтичСских ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ range():

  • НаиболСС часто функция range() примСняСтся для запуска Ρ†ΠΈΠΊΠ»Π° for Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство Ρ€Π°Π·. НапримСр, смотритС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²Ρ‹ΡˆΠ΅.
  • Π’ Python 3 range() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт.
  • Π˜ΡΠΏΠΎΠ»Π»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π² срСзах (ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ):
    • range(stop) β€” Π² Π΄Π°Π½Π½ΠΎΠΌ случаС с 0 Π΄ΠΎ stop-1;
    • range(start, stop) β€” Аналогично ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π²Ρ‹ΡˆΠ΅, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ нуля, ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅;
    • range(start, stop, step) β€” ДобавляСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ шага, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚ΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.

  • Π’ Python 2 Π±Ρ‹Π»ΠΈ 2 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:
    • range(…) которая Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ list(range(…)) Π² Python 3 β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½Π° Π²Ρ‹Π΄Π°Π²Π°Π»Π° Π½Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π° сразу Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ список. Π’ΠΎ Π΅ΡΡ‚ΡŒ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти, описанныС Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4 Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² Python 2 Π½Π°Π΄ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ!
    • xrange(…) β€” которая Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ range(…) Π² Python 3 ΠΈ ΠΈΠ· 3 вСрсии Π±Ρ‹Π»Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования:

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

9. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

9.1 ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ нСскольким спискам
import itertools
l1 = [1,2,3]
l2 = [10,20,30]
result = [l*2 for l in itertools.chain(l1, l2)]
print(result)   # [2, 4, 6, 20, 40, 60]

9.2 Вранспозиция ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

(ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΊΠΎΠ³Π΄Π° строки ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами со столбцами).

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

matrix = [[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12]]

Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π΅Π΅ Ρ‚Ρ€Π°Π½ΡΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transposed)  # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Π­Ρ‚Π° ΠΆΠ΅ транспозиция ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π°

transposed = []
for i in range(len(matrix[0])):
    new_row = []
    for row in matrix:
        new_row. append(row[i])
    transposed.append(new_row)
print(transposed)  # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

И Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Ρ€Π½ΠΎΠΉ ΠΌΠ°Π³ΠΈΠΈ ΠΎΡ‚ @longclaps

transposed = list(map(list, zip(*matrix)))
print(transposed)  # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

9.3 Π—Π°Π΄Π°Ρ‡Π° Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π΄Π½Π΅ΠΉ
# Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ список Π΄Π½Π΅ΠΉ ΠΎΡ‚ 1 Π΄ΠΎ 31 с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ
days = [d for d in range(1, 32)]

# Π”Π΅Π»ΠΈΠΌ список Π΄Π½Π΅ΠΉ Π½Π° Π½Π΅Π΄Π΅Π»ΠΈ
weeks = [days[i:i+7] for i in range(0, len(days), 7)]
print(weeks)   # [[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21], [22, 23, 24, 25, 26, 27, 28], [29, 30, 31]]

# Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 5 Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π΄Π½Π΅ΠΉ, отбрасывая ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅
work_weeks = [week[0:5] for week in weeks]
print(work_weeks)   # [[1, 2, 3, 4, 5], [8, 9, 10, 11, 12], [15, 16, 17, 18, 19], [22, 23, 24, 25, 26], [29, 30, 31]]

# Если Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ списком Π΄Π½Π΅ΠΉ - ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ
wdays = [item for sublist in work_weeks for item in sublist]
print(wdays)   # [1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 29, 30, 31]

МоТно ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ изящно, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ индСксы

# Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ список Π΄Π½Π΅ΠΉ ΠΎΡ‚ 1 Π΄ΠΎ 31 с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ
days = [d for d in range(1, 32)]

wdays6 = [wd for (i, wd) in enumerate(days, 1) if i % 7 != 0]  # УдаляСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ 7-ΠΉ дСнь
# УдаляСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ 6 дСнь Π² ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ удалСния:
wdays5 = [wd for (i, wd) in enumerate(wdays6, 1) if i % 6 != 0]

print(wdays5)
# [1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 29, 30, 31]

# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ просто ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° условия Π² ΠΎΠ΄Π½ΠΎΠΌ if Π½Π΅ получится,
# ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ 12-ΠΉ дСнь дСлится Π½Π° 6, Π½ΠΎ Π½Π΅ Π²Ρ‹ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° послСдний 2 дня Π½Π΅Π΄Π΅Π»ΠΈ!

# Π¨ΠΈΠΊΠ°Ρ€Π½ΠΎΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ @sophist:
days = [d + 1 for d in range(31) if d % 7 < 5]

10. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Бсылки ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

  1. Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ англоязычная ΡΡ‚Π°Ρ‚ΡŒΡ с Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ объяснСниСм Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ:
  2. Если Ρƒ Вас Π΅ΡΡ‚ΡŒ слоТности с ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ выраТСниями, посмотритС ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠ½ΡƒΡŽ Π°Π½Π³Π»ΠΎΡΠ·Ρ‹Ρ‡Π½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π³Π΄Π΅ проводятся Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ выраТСниями ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с SQL ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Excel. НапримСр Ρ‚Π°ΠΊ:
    squared_evens = [n ** 2              # SELECT
                    for n in numbers    # FROM
                    if n % 2 == 0]      # WHERE

  3. UPD ΠΎΡ‚ fireSparrow: Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Python β€” PythonQL, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² стилС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.
  4. Π˜Π»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° английском, довольно наглядно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ синтаксис Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
  5. Если Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° английском).
ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°ΡŽ ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ:

  • Если я Π³Π΄Π΅-Ρ‚ΠΎ допустил Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ ΡƒΡ‡Ρ‘Π» Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ β€” ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях, Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ·ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΡΡ‚Π°Ρ‚ΡŒΡŽ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ вашСго авторства.
  • Если ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ понятны ΠΈ трСбуСтся ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ β€” ΠΏΠΈΡˆΠΈΡ‚Π΅ ваши вопросы Π² коммСнтариях β€” ΠΈΠ»ΠΈ я ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π΄Π°Π΄ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‚, Π° Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ вопросы с ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ·ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΡΡ‚Π°Ρ‚ΡŒΡŽ.

Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ простой Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря Python

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Π² основном Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ.

>>> d = {'lol': {'12': '3',  '35':''}, 'w': {'12': '3', '35':''}}

>>> def iteritems(s):
...     keys = s.keys()
...     for key in keys:
...             yield key, s[key]
... 
>>> for k, v in iteritems(d):
...     print k, v
... 
w {'12': '3', '35': ''}
lol {'12': '3', '35': ''}

Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€. Но Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ iteritems Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ s.keys() , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΊΠ»ΡŽΡ‡ΠΈ Π² словарС. Если ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ большой (Π±ΠΎΠ»Π΅Π΅ 100 элСмСнтов), это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ эффСктивно для памяти.

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

МоТно Π²ΠΎΠ·Ρ€Π°Π·ΠΈΡ‚ΡŒ: количСство ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС, Ρ‡Π΅ΠΌ количСство элСмСнтов, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния.

Π•ΡΡ‚ΡŒ прСдлоТСния? Или Π»ΡƒΡ‡ΡˆΠ΅ (ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ, Π½ΠΎ это совсСм Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ).

python

dictionary

generator

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ


CppLearner Β  Β 

04 сСнтября 2012 Π² 19:56

2 ΠΎΡ‚Π²Π΅Ρ‚Π°


  • Python Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

    Π•ΡΡ‚ΡŒ Π»ΠΈ способ Π² Python ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это new_list = [x for x in items] (ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списка) для словаря? Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ new_dict = [x=>y for x, y in items.iteritems()] Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ {x: y}

  • ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² python

    Π― ΠΏΠΈΡˆΡƒ простой Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отличаСтся ΠΎΡ‚ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π² этой ссылкС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Python гСнСрация простых чисСл Π’ΠΎΡ‚ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ def sequence(): i = 1 while True: i += 2 yield i def prime_generator(n): i = 2 it = sequence() while i < n: it= filter(lambda x: x % i, it) i = next(it) yield i…



11

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ .iterkeys() Π² python 2.x; Π² python 3.x .keys() — это прСдставлСниС , Π° Π½Π΅ Π½ΠΎΠ²Ρ‹ΠΉ список. Π’ python 2.7 Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ viewkeys() , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС.

БущСствуСт эквивалСнтный ΠΌΠ΅Ρ‚ΠΎΠ΄ .iteritems() , Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠΉ ваш слуТСбный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ. πŸ™‚ Π’Π΅ ΠΆΠ΅ замСчания ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ здСсь для python 3.x ΠΈ 2.7, см. ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


Martijn Pieters Β  Β 

04 сСнтября 2012 Π² 19:57



3

Π’Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚Π΅ вСлосипСд Π·Π°Π½ΠΎΠ²ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ создания ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ списка Π² Python 2.x просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

for k, v in d.iteritems():
    print k, v

Π’ Python 3.x ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

for k, v in d.items():
    print(k, v)

ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ .items() Π² этой вСрсии Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ прСдставлСния .

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ


martineau Β  Β 

05 сСнтября 2012 Π² 01:42


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ простых чисСл Π² Python

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ я дСлаю Π½Π΅ Ρ‚Π°ΠΊ с этим ΠΊΠΎΠ΄ΠΎΠΌ? Π’ любом случаС это просто ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ‘count’. МнС просто Π½ΡƒΠΆΠ΅Π½ ΠΎΡ‡Π΅Π½ΡŒ простой Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ простых чисСл (Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного). import math…

Π½ΡƒΠΆΠ΅Π½ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных слов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ словаря

Π― дСлаю ΠΈΠ³Ρ€Ρƒ ΠΏΠ°Π»Π°Ρ‡Π°, поэтому ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных слов. Моя Ρ†Π΅Π»ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сказал, сколько Π±ΡƒΠΊΠ² ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ Π² словС, ΠΈ Π²Ρ‹Π²Π΅Π» случайноС слово с Ρ‚Π°ΠΊΠΈΠΌ количСством Π±ΡƒΠΊΠ². Π―…

Python ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€

Π― Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» (простой) Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ python. Π’Π΅ΠΏΠ΅Ρ€ΡŒ я Ρ…ΠΎΡ‡Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ (ΠΈΠ· Π½Π΅Π³ΠΎ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС значСния, Π½ΠΎ послСдний. def gen(x): # Generate the interval [x, 10] if x <= 10:…

Python Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

Π•ΡΡ‚ΡŒ Π»ΠΈ способ Π² Python ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это new_list = [x for x in items] (ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списка) для словаря? Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ new_dict = [x=>y for x, y in items.iteritems()] Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ {x: y}

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² python

Π― ΠΏΠΈΡˆΡƒ простой Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отличаСтся ΠΎΡ‚ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π² этой ссылкС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Python гСнСрация простых чисСл Π’ΠΎΡ‚ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ def sequence(): i = 1 while True: i += 2 yield i def…

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс словаря Π² Swift с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ²

SWIFT / IOS / Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ / Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ / ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π― создал упорядочСнный ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ blogpost http://timekl.com/blog/2014/06/02/learning-swift-ordered-dictionaries / Как описано Π² Π±Π»ΠΎΠ³Π΅,…

Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ с использованиСм Python

я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· сайтов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. import string from random import * characters = string.ascii_letters + string.punctuation + string.digits password =…

Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ словаря Π½Π° нСсколько ΠΊΠΎΠΏΠΈΠΉ Π² python

Π£ мСня Π΅ΡΡ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ python d = { ‘facets’:{‘style’:collared,’pocket’:yes}, ‘vars’:[ {‘facets’:{‘color’:blue, ‘size’:XL}}, {‘facets’:{‘color’:blue, ‘size’:L}} ] } ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠ»ΡŽΡ‡Π΅ ‘vars’ Π΅ΡΡ‚ΡŒ 2…

Как ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ порядок Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ словаря Π² python (Π½Π΅ простой, Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ)?

Π― просто скопировал ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, сгСнСрированный ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ python(ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π² ΠΊΠΎΠ΄Π΅ python). a = {‘b’:{‘d’:3, ‘c’:4}, ‘a’:2} Π½ΠΎ Π²ΠΎ врСмя чтСния словаря порядок…

Python простой Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… Ρ‚ΠΎΠ½ΠΎΠ²

Π˜Ρ‰Ρƒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ (простой) Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ½ΠΎΠ² python для использования Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ скриптС, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ Π½Π° raspi с Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ USB. На Π»Π΅Ρ‚Ρƒ трСбуСтся Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ½Π° ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ частоты….

python — Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря?

Π‘Π΄Π΅Π»Π°Π» ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΈΠ½Π°Ρ‡Π΅.

import json
import urllib
import os
import copy
import ast
import operator
import requests


DISTANCE_MATRIX_URL = "http://maps.googleapis.com/maps/api/distancematrix/"


class DM(object):

    def __init__(self, api_key=None, url=DISTANCE_MATRIX_URL):

        self.api_key = api_key
        self.url = url
        self.response = ''
        self.dict_response = {'distance': {'value': {}, 'text': {}, },
                              'duration': {'value': {}, 'text': {}, },
                              }

        self.origins = ''
        self.destinations = ''

    def make_request(self, origins, destinations, mode='driving'):
        data = {}
        self.origins = [origins] if type(origins) == str else origins
        self.destinations = [destinations] if type(destinations) == str else destinations
        data['origins'] = origins if type(origins) == str else '|'.join(origins)
        data['destinations'] = destinations if type(destinations) == str else '|'.join(destinations)
        data['mode'] = mode

        url_values = urllib.parse.urlencode(data)
        output_format = 'json'
        url = os.path.join(self.url, output_format)

        self.response = ast.literal_eval((urllib.request.urlopen(url + '?' + url_values).read()).decode("utf-8"))['rows']
        self.dict_response = {'distance': {'value': {}, 'text': {}, },  # Reset temporary dict
                              'duration': {'value': {}, 'text': {}, },
                              }


    def __get_response_element_data(self, key1, key2):
        if not self. dict_response[key1][key2]:
            l = self.response
            for i, orig in enumerate(self.origins):
                self.dict_response[key1][key2][orig] = {}
                for j, dest in enumerate(self.destinations):
                    if l[i]['elements'][j]['status'] == 'OK':
                        self.dict_response[key1][key2][orig][dest] = l[i]['elements'][j][key1][key2]
                    else:
                        self.dict_response[key1][key2][orig][dest] = l[i]['elements'][j]['status']

        return self.dict_response[key1][key2]

    def get_distance_values(self):
        return self.__get_response_element_data('distance', 'value')

    def get_distance_texts(self):
        return self.__get_response_element_data('distance', 'text')

    def get_time_values(self):
        return self.__get_response_element_data('duration', 'value')

    def get_time_texts(self):
        return self.__get_response_element_data('duration', 'text')

    def get_closest_points(self, max_distance=None, num=10, origin_index=0, origin_raw=None):
        if not self.dict_response['distance']['value']:
            self.get_distance_values()

        if origin_raw:
            origin = copy.deepcopy(self.dict_response['distance']['value'][origin_raw])
        else:
            origin = copy.deepcopy(self.dict_response['distance']['value'][self.origins[origin_index]])

        tmp_origin = copy.deepcopy(origin)
        if max_distance:
            for k, v in tmp_origin.iteritems():
                if v > max_distance:
                    del(origin[k])

        if origin:
            return sorted(origin.iteritems(), key=operator.itemgetter(1))[:num]

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ это Ρ‚Π°ΠΊ:

a = DM()

a.make_request(['Minsk'], ['Moscow'])

# ΠžΡ‚Π΄Π°Ρ‘ΠΌ ΠΎΠ΄ΠΈΠ½ origin (Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ считаСм) ΠΈ ΠΎΠ΄ΠΈΠ½ destination (ΠΏΡƒΠ½ΠΊΡ‚ назначСния).

Если Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (ΠΎΠ½ ΠΌΠ΅Π½Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ), Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π°ΠΊ:

a. get_distance_texts()

ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

{'Minsk': {'Moscow': '717 km'}}

Если ΠΆΠ΅, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΈΠΌ origin ΠΈ нСсколькими destination, Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π°ΠΊ:

a.make_request(['Minsk'], ['Moscow', 'Sankt-Peterburg'])
a.get_distance_texts()
{'Minsk': {'Moscow': '717 km', 'Sankt-Peterburg': '795 km'}}

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, расстояниС ΠΈΠ½ΠΎΠ΅. Но Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Москвой ΠΈ БПб Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ точная.

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

a.get_distance_values()
{'Minsk': {'Moscow': 717038, 'Sankt-Peterburg': 795481}}

А Π²ΠΎΡ‚ Ρ‚Π°ΠΊ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ duration

a.get_time_values()
{'Minsk': {'Moscow': 28751, 'Sankt-Peterburg': 36415}}

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, с тСкстовым ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

a.get_time_texts()
{'Minsk': {'Moscow': '7 hours 59 mins', 'Sankt-Peterburg': '10 hours 7 mins'}}

Если ΠΆΠ΅ Π½Π°Π΄ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькоими origins ΠΈ destinations, Ρ‚ΠΎ Ρ‚Π°ΠΊ:

a.make_request(['Minsk', 'Moscow'], ['Moscow', 'Varshava'])
a.get_distance_texts()
{'Minsk': {'Moscow': '717 km', 'Varshava': '554 km'}, 'Moscow': {'Moscow': '1 m', 'Varshava': '1,264 km'}}

А Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

a.get_closest_points()

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт — ΠΏΡƒΠ½ΠΊΡ‚ назначСния, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ — расстояниС ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ origin

[('Varshava', 553521), ('Moscow', 717038)]

ΠŸΠΎΠΊΠΎΡ€ΡΠ΅ΠΌ Python — ΡƒΡ€ΠΎΠΊΠΈ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…: ПониманиС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² мноТСств ΠΈ словарСй

БСйчас 2 часа Β Π½ΠΎΡ‡ΠΈ, я Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ понимаю, Ρ‡Ρ‚ΠΎ относится ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Python, Π½ΠΎ ΠΏΠΈΡˆΡƒ этот пост… надСюсь ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

>>> {x * x for x in range(10)} Β  Β  Β  Β  # Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}

>>> set(x * x for x in range(10)) # Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ конструктор Ρ‚ΠΈΠΏΠ°
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}

>>> {x: x * x for x in range(10)}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

>>> dict((x, x * x) for x in range(10))
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

ΠœΡ‹ всСгда ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

НиТС привСдСтся рСализация, эквивалСнтна Π΄Π²ΡƒΠΌ послСдним Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ:

>>> res = set()
>>> for x in range(10): Β # Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° мноТСств
… Β  Β  res.add(x * x)

>>> res
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
————————————-
>>> res = {}

>>> for x in range(10): Β # Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° словарСй
… Β  Β  res[x] = x * x

>>> res
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

Если Π²Π°ΠΌ потрСбуСтся Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния ΠΏΠΎ запросу,Β 
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€:

>>> G = ((x, x * x) for x in range(10))

>>> next(G)

(0, 0)

>>> next(G)

(1, 1)

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ синтаксис гСнСраторов мноТСств ΠΈ словарСй

Как Β ΠΈ Β Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹  списков, Β Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹  мноТСств ΠΈ  словарСй Β ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚
инструкции if, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Β ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ элСмСн

Ρ‚Ρ‹, – ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ конструкции воспроизводят ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ…Β 

чисСл (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСлятся Π½Π° 2 Π±Π΅Π· остатка) Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅:

>>> [x * x for x in range(10) if x % 2 == 0] # Бписки упорядочСны
[0, 4, 16, 36, 64]

>>> {x * x for x in range(10) if x % 2 == 0} # А мноТСства — Π½Π΅Ρ‚
{0, 16, 4, 64, 36}

>>> {x: x * x for x in range(10) if x % 2 == 0}# Как ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ
Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β  Β # словаря
{0: 0, 8: 64, 2: 4, 4: 16, 6: 36}

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ for Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ допустимыми, хотя нСупорядочСнныС типы Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ появлСния Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько ΠΎΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²:

>>> [x + y for x in [1, 2, 3] for y in [4, 5, 6]] # Бписки ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹

[5, 6, 7, 6, 7, 8, 7, 8, 9]

>>> {x + y for x in [1, 2, 3] for y in [4, 5, 6]} # А мноТСства — Π½Π΅Ρ‚

{8, 9, 5, 6, 7}

>>> {x: y for x in [1, 2, 3] for y in [4, 5, 6]} # Как ΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ словарСй

{1: 6, 2: 6, 3: 6}

Подобно Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ списков, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ мноТСств ΠΈ словарСй способны Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² – спискам, строкам, Ρ„Π°ΠΉΠ»Π°ΠΌ,Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ:
>>> {x + y for x in β€˜ab’ for y in β€˜cd’}
{β€˜bd’, β€˜ac’, β€˜ad’, β€˜bc’}

>>> {x + y: (ord(x), ord(y)) for x in β€˜ab’ for y in β€˜cd’}
{β€˜bd’: (98, 100), β€˜ac’: (97, 99), β€˜ad’: (97, 100), β€˜bc’: (98, 99)}

>>> {k * 2 for k in [β€˜spam’, β€˜ham’, β€˜sausage’] if k[0] == β€˜s’}

{β€˜sausagesausage’, β€˜spamspam’}

>>> {k. upper(): k * 2 for k in [β€˜spam’, β€˜ham’, β€˜sausage’] if k[0] == β€˜s’}

{β€˜SAUSAGE’: β€˜sausagesausage’, β€˜SPAM’: β€˜spamspam’}







НСмного ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, Ссли Ρ‚Ρ‹ Π½Π΅ Π±ΠΎΡ‚ для индСксации Ρ‚ΠΎΠ³Π΄Π° Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ!!!

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python, Python, Python3.0, Python3, Python3.x, Python3.1, Python3.2, Python3.3, Python 3.x, Python, Python 3.0, Python 3, Python 3.1, Python 3.2, Python 3.3, Python 3.3.1

Python. Π Π°Π±ΠΎΡ‚Π° со словарями. ΠžΠ±Ρ…ΠΎΠ΄. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π Π°Π±ΠΎΡ‚Π° со словарями. ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ list(), zip(). ΠžΠ±Ρ…ΠΎΠ΄ словаря. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ словарСй. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°. Π‘ΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠ΅ словарСй с мноТСствами


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


Поиск Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсах:

1. ВстроСнная функция list(). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ примСнСния со словарями

ИспользованиС встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ list() позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ списки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ ΠΏΠ°Ρ€ (ΠΊΠ»ΡŽΡ‡:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ список с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ list() Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

  • ΠΌΠ΅Ρ‚ΠΎΠ΄ values() позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ словаря;
  • ΠΌΠ΅Ρ‚ΠΎΠ΄ keys() позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΊΠ»ΡŽΡ‡Π΅ΠΉ словаря;
  • ΠΌΠ΅Ρ‚ΠΎΠ΄ items() позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΏΠ°Ρ€ (ΠΊΠ»ΡŽΡ‡:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅).

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± использовании ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² values(), keys(), items() описываСтся здСсь.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€.

# Π Π°Π±ΠΎΡ‚Π° со словарями
# ВстроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ list()

# Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ
Figures = { 1:'Rectangle', 2:'Triangle', 3:'Circle'}

# 1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ словаря
values = list(Figures.values())
print(values) # ['Rectangle', 'Triangle', 'Circle']

# 2. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΊΠ»ΡŽΡ‡Π΅ΠΉ словаря
keys = list(Figures.keys()) # keys = [1, 2, 3, 4]
print(keys)

# 3. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΏΠ°Ρ€ (ΠΊΠ»ΡŽΡ‡:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)
pairs = list(Figures.items())
print(pairs) # [(1,'Rectangle'),(2,'Triangle'),(3,'Circle')]

Β  ⇑

2.

ВстроСнная функция zip(). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания словаря

Ѐункция zip() позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ объСдинСния списков ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€.

# Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ. Ѐункция zip()

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ словаря ΠΈΠ· списков ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
Numbers = dict(zip([1, 2, 3], ['One', 'Two', 'Three']))
print(Numbers) # {1: 'One', 2: 'Two', 3: 'Three'}

Β  ⇑

3. ΠžΠ±Ρ…ΠΎΠ΄ словаря с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for. ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ дСмонстрируСтся ΠΎΠ±Ρ…ΠΎΠ΄ словаря с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for ΠΈ Π²Ρ‹Π²ΠΎΠ΄ всСх ΠΏΠ°Ρ€ (ΠΊΠ»ΡŽΡ‡:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€.

# Π Π°Π±ΠΎΡ‚Π° со словарями
# ΠžΠ±Ρ…ΠΎΠ΄ словаря с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for

# Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ
Months = { 1:'Jan', 2:'Feb', 3:'Mar',
           4:'Apr', 5:'May', 6:'Jun',
           7:'Jul', 8:'Aug', 9:'Sep',
           10:'Oct', 11:'Nov', 12:'Dec' }

# Π¦ΠΈΠΊΠ» for ΠΎΠ±Ρ…ΠΎΠ΄Π° словаря
# Π² Ρ†ΠΈΠΊΠ»Π΅ mn - ΠΊΠ»ΡŽΡ‡, Months[mn] - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
for mn in Months:
    print(mn, ': ', Months[mn])

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

1 : Jan
2 : Feb
3 : Mar
4 : Apr
5 : May
6 : Jun
7 : Jul
8 : Aug
9 : Sep
10 : Oct
11 : Nov
12 : Dec


Β  ⇑

4. ИспользованиС словарСй для Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для прСдставлСния Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсколько элСмСнтов ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ продСмонстрировано прСдставлСниС Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ чисСл Π² Π²ΠΈΠ΄Π΅ словаря. ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°

,

ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ словаря. РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

# Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…

# ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° M
M = {} # ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ
M[(0, 1)] = 1 # ΠΊΠ»ΡŽΡ‡=(0,1): Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅=1
M[(1, 2)] = 3 # ΠΏΠ°Ρ€Π° (ΠΊΠ»ΡŽΡ‡:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) = ((1,2):3)
M[(2, 0)] = 2 # ΠΏΠ°Ρ€Π° (ΠΊΠ»ΡŽΡ‡:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) = ((2,0):2)

print(M) # {(0, 1): 1, (1, 2): 3, (2, 0): 2}

Π’ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ словаря ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ нСпустых элСмСнтов. Π’Π°ΠΊ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° (2, 0) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ строку 2, столбСц 0.

Β  ⇑

5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ словарСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² словарСй. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с использованиСм Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² словарСй. Π’ этом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΠΆΠ΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… способов:

  • ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½Π° основС Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ выраТСния;
  • ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½Π° основС ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;
  • ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ· списков ΠΊΠ»ΡŽΡ‡Π΅ΠΉ;
  • ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ zip().

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ дСмонстрируСтся использованиС всСх способов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€.

# Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ словарСй

# 1. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½Π° основС Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ выраТСния
# Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Ρ‹ (ΠΊΠ»ΡŽΡ‡: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) = (i: 5*i)
A = { i: i*5 for i in [10,20,30,40] }
print(A) # {10: 50, 20: 100, 30: 150, 40: 200}

# 2. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ (строкС)
s = 'Hello'
B = { sym: sym*3 for sym in s } # ΠΏΠ°Ρ€Π° (sym:sym*3)
print(B) # {'H': 'HHH', 'e': 'eee', 'l': 'lll', 'o': 'ooo'}

numbers = [ 15, 25, 30 ]
C = { num: str(num) for num in numbers }
print(C) # {15: '15', 25: '25', 30: '30'}

# 3. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ словаря ΠΈΠ· списка ΠΊΠ»ΡŽΡ‡Π΅ΠΉ
# Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ список ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹
value = int(input('Input value: '))
listKeys = [ 1, 2, 3, 4 ]
D = { lk:value for lk in listKeys }
print(D)

# Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ список ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ None
value = None
listKeys = [ 'a', 'b', 'c' ]
E = { lk:value for lk in listKeys }
print(E) # {'a': None, 'b': None, 'c': None}

# 4. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ zip()
WMonths = [ 'Dec', 'Jan', 'Feb']
NumMonths = [ 12, 1, 2 ]
F = { nm:wm for (nm,wm) in zip(NumMonths,WMonths) }
print(F) # {12: 'Dec', 1: 'Jan', 2: 'Feb'}

Β  ⇑

6. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° словаря. ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Как извСстно, ΠΊΠ»ΡŽΡ‡ΠΈ Π² словарС ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС. .

# Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ. ОбъСдинСниС словарСй ΠΈ мноТСств

# Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ
A = { 1:'One', 2:'Two', 3:'Three', 4:'Four', 5:'Five' }

# ОбъСдинСниС отобраТСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ мноТСств,
# получаСтся Π½ΠΎΠ²ΠΎΠ΅ мноТСство

# 1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ
keys = A.keys() # keys = dict_keys([1, 2, 3, 4, 5])

# 2. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ мноТСство ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит число 2
B = keys & {2} # B = {2} - Π½ΠΎΠ²ΠΎΠ΅ мноТСство

# 3. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ мноТСство ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит числа 3, 5
C = keys {3, 5} # {1, 2, 4}

# 4. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ мноТСству ΠΊΠ»ΡŽΡ‡Π΅ΠΉ числа 8, 11
D = keys | { 8, 11 } # D = {1, 2, 3, 4, 5, 8, 11}

Β  ⇑


БвязанныС Ρ‚Π΅ΠΌΡ‹

Β  ⇑


Β 

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ | Python

Π’ Python просто Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков —Β Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ. Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° с английского. Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ гСнСратором списка, Π² английском Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ «list comprehension» ΠΈ ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚.

Π‘Π»ΠΎΠ²ΠΎ «comprehension» (ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, осмыслСниС) оказываСтся ΠΊΠ°ΠΊ Π±Ρ‹ Π½Π΅ Π² Ρ‚Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° русский. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ «ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списка». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ «Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка», понимая ΠΏΠΎΠ΄ словом «Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€» Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, которая Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ создаСт, список.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ — это особыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ своС состояниС. Π’ Ρ†ΠΈΠΊΠ»Π΅ for ΠΎΠ½ΠΈΒ Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ относятся списки, словари, строки ΠΈ Π΄Ρ€. Однако Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ __next__(), Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².Β 

Быстрым способом создания ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΡ‚Ρ‹Ρ…Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ выраТСния — generator expressions. Бинтаксис этих Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉΒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° синтаксис Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² списков. Однако ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€. Π’Ρ‚ΠΎΡ€ΠΎΠΉ — список.

Π‘Π½Π°Ρ‡Π°Π»Π° рассмотрим Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊ синтаксичСской конструкции.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков

Π’ Python Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ быстро Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ списки.

БинтаксичСская конструкция Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹ΠΉ список, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ элСмСнтами ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊΒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ…Β Π² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ список.Β 

>>> a = [1, 2, 3]
>>> b = [i+10 for i in a]
>>> a
[1, 2, 3]
>>> b
[11, 12, 13]

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ списка являСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ [i+10 for i in a]. Π—Π΄Π΅ΡΡŒ a — ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это Π΄Ρ€ΡƒΠ³ΠΎΠΉ список. Из Π½Π΅Π³ΠΎ извлСкаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² Ρ†ΠΈΠΊΠ»Π΅ for. ΠŸΠ΅Ρ€Π΅Π΄ for описываСтся дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСтся Π½Π°Π΄ элСмСнтом ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π² Π½ΠΎΠ²Ρ‹ΠΉ список.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ создаСт Π½ΠΎΠ²Ρ‹ΠΉ список, Π° Π½Π΅ измСняСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ. Если Π½Π°Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π΅ΠΉ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

>>> a = [1, 2, 3]
>>> a = [i+10 for i in a]
>>> a
[11, 12, 13]

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков относятся ΠΊ разряду «ΡΠΈΠ½Ρ‚аксичСского сахара» языка программирования Python. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π±Π΅Π· Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ:

>>> for index, value in enumerate(a):
...     a[index] = value + 10
... 
>>> a
[11, 12, 13]

Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒΒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ссылок Π½Π° список, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ остороТно:

>>> ls0 = [1,2,3]
>>> ls1 = ls0
>>> ls1.append(4)
>>> ls0
[1, 2, 3, 4]
>>> ls1 = [i+1 for i in ls1]
>>> ls1
[2, 3, 4, 5]
>>> ls0
[1, 2, 3, 4]

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ списка Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Однако Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ список Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅Β Π±ΡƒΠ΄ΡƒΡ‚Β ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° разныС списки.

ΠŸΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΌ Π² Ρ†ΠΈΠΊΠ»Π΅ for ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌΒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ список. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ Π² список ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ строки Ρ„Π°ΠΉΠ»Π°.

>>> lines = [line.strip() for line in open('text.txt')]
>>> lines
['one', 'two', 'three']

Π’ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ условиС:

>>> from random import randint
>>> nums = [randint(10, 20) for i in range(10)]
>>> nums
[18, 17, 11, 11, 15, 18, 11, 20, 10, 19]
>>> nums = [i for i in nums if i%2 == 0]
>>> nums
[18, 18, 20, 10]

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅Β Ρ†ΠΈΠΊΠ»Ρ‹:

>>> a = "12"
>>> b = "3"
>>> c = "456"
>>> comb = [i+j+k for i in a for j in b for k in c]
>>> comb
['134', '135', '136', '234', '235', '236']

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ словарСй ΠΈ мноТСств

Если Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки Π½Π° Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ список, Π° ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

>>> a = {i:i**2 for i in range(11,15)}
>>> a
{11: 121, 12: 144, 13: 169, 14: 196}

ΠŸΡ€ΠΈ этом синтаксис выраТСния Π΄ΠΎ for Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если этого Π½Π΅Ρ‚, Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрировано мноТСство:

>>> a = {i for i in range(11,15)}
>>> a
set([11, 12, 13, 14])
>>> b = {1, 2, 3}
>>> b
set([1, 2, 3])

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ВыраТСния, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° выраТСния, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ списки, словари ΠΈ мноТСства Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки:

>>> a = (i for i in range(2, 8))
>>> a
<generator object <genexpr> at 0x7efc88787910>
>>> for i in a:
...     print(i)
... 
2
3
4
5
6
7

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Ρ†ΠΈΠΊΠ»Π΅ for Π½Π΅ получится, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠΆΠ΅ сгСнСрировал всС значСния ΠΏΠΎ Π·Π°Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² Π½Π΅Π³ΠΎ «Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ экономят ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ хранятся Π½Π΅ всС значСния, скаТСм, большого списка, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт, ΠΏΡ€Π΅Π΄Π΅Π» ΠΈΒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вычисляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт.Β 

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, это сокращСнная запись ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

>>> def func(start, finish):
...     while start < finish:
...             yield start * 0.33
...             start += 1
... 
>>> a = func(1, 4)
>>> a
<generator object func at 0x7efc88787a50>
>>> for i in a:
...     print(i)
... 
0.33
0.66
0.99

Ѐункция, содСрТащая yield,Β Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π° Π½Π΅ выполняСт свой ΠΊΠΎΠ΄ сразу. Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ исполняСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __next__(). Π’ Ρ†ΠΈΠΊΠ»Π΅ for это дСлаСтся автоматичСски. ΠŸΡ€ΠΈ этом функция сохраняСт значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

Если Π½Π΅Ρ‚ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ, ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

>>> b = (i*0.33 for i in range(1,4)) 
>>> b
<generator object <genexpr> at 0x7efc88787960>
>>> for i in b:
...     print(i)
... 
0.33
0.66
0.99

Π“Π»Π°Π²Π° 3. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ 4 апрСля 2020 Π² 01:43

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ

Нам приходится сильнСС Π½Π°ΠΏΡ€ΡΠ³Π°Ρ‚ΡŒ своС Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΊΠ°ΠΊ Π² худоТСствСнной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π½Π° самом Π΄Π΅Π»Π΅, Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ происходит.

Π ΠΈΡ‡Π°Ρ€Π΄ Π€Π΅ΠΉΠ½ΠΌΠ°Π½

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π³Π»Π°Π²Ρ‹

Нам приходится сильнСС Π½Π°ΠΏΡ€ΡΠ³Π°Ρ‚ΡŒ своС Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΊΠ°ΠΊ Π² худоТСствСнной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚ Π½Π° самом Π΄Π΅Π»Π΅, Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ происходит.

Π ΠΈΡ‡Π°Ρ€Π΄ Π€Π΅ΠΉΠ½ΠΌΠ°Π½

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ языкС программирования Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° такая ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, слоТно устроСнная, Π½ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ упрощённая ΡˆΡ‚ΡƒΠΊΠ°. Если Π²Ρ‹ Ρ€Π°Π½ΡŒΡˆΠ΅ писали Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° это внимания, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ваш старый язык Π½Π΅ Ρ‚Π°ΠΊ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π» эту ΡˆΡ‚ΡƒΠΊΡƒ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±Ρ‹Π» занят Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π» Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅). Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков, словарСй ΠΈ мноТСств – Ρ‚Ρ€ΠΈ взаимосвязанныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, сконцСнтрированныС Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Но сначала я Ρ…ΠΎΡ‡Ρƒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ нашСго повСствования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΎ Π΄Π²ΡƒΡ… модулях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ вашСй локальной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

3.2 Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ

Python 3 поставляСтся с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ os, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «опСрационная систСма». ΠœΠΎΠ΄ΡƒΠ»ΡŒ os содСрТит мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…, Ρ„Π°ΠΉΠ»Π°Ρ…, процСссах ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния (Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, ΠΈ для манипулирования ΠΈΠΌΠΈ). Python ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс для всСх ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π° любом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-зависимого ΠΊΠΎΠ΄Π°.

3.2.1 Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³

ВсСгда Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

Когда вашС знакомство с Python Ρ‚ΠΎΠ»ΡŒΠΊΠΎ начинаСтся, Π²Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Python. На протяТСнии всСй этой ΠΊΠ½ΠΈΠ³ΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, выглядящиС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ модуля ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²
  2. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· этого модуля
  3. ОбъяснСниС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

Если Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, шаг 1 окаТСтся Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ImportError. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Python Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² ΠΏΡƒΡ‚ΠΈ поиска ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° import, Π½ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ Π΅Π³ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ examples Π½Π΅ содСрТится Π² путях поиска. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ…:

  1. Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ examples Π² ΠΏΡƒΡ‚ΡŒ поиска ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° import;
  2. Π»ΠΈΠ±ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ ΠΏΠ°ΠΏΠΊΡƒ examples.

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ являСтся нСявным ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Python постоянно Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² памяти. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π΅ΡΡ‚ΡŒ всСгда, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Python, запускаСтС свой сцСнарий ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ CGI-сцСнарий Π³Π΄Π΅-Ρ‚ΠΎ Π½Π° Π²Π΅Π±-сСрвСрС.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ os содСрТит Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ.

>>> import os                                            β‘ 
>>> print(os.getcwd())                                   β‘‘
C:\Python31
>>> os.chdir('/Users/pilgrim/diveintopython3/examples')  β‘’
>>> print(os.getcwd())                                   β‘£
C:\Users\pilgrim\diveintopython3\examples
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 1. ΠœΠΎΠ΄ΡƒΠ»ΡŒ os поставляСтся вмСстС с Python; Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠ³Π΄Π° ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΈ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ os.getcwd() для получСния значСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Когда Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² графичСской ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Python, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ являСтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. Π’ Windows это зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΡƒΠ΄Π° Π²Ρ‹ установили Python; ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ c:\Python31. Если ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Python Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ считаСтся Ρ‚ΠΎΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ, ΠΊΠΎΠ³Π΄Π° запускали Π΅Ρ‘.
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ os.chdir() Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.
  4. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 5. Когда я Π²Ρ‹Π·Ρ‹Π²Π°Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ os.chdir(), я использовал ΠΏΡƒΡ‚ΡŒ Π² стилС Linux (косая Ρ‡Π΅Ρ€Ρ‚Π°, Π½Π΅Ρ‚ Π±ΡƒΠΊΠ²Ρ‹ диска), Π΄Π°ΠΆΠ΅ Ссли Π½Π° самом Π΄Π΅Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² Windows. Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Π΅Ρ… мСст, Π³Π΄Π΅ Python пытаСтся ΡΡ‚ΠΈΡ€Π°Ρ‚ΡŒ различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами.

3.2.2 Π Π°Π±ΠΎΡ‚Π° с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²

Π Π°Π· зашла Ρ€Π΅Ρ‡ΡŒ ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…, я Ρ…ΠΎΡ‡Ρƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ os.path. Он содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².

>>> import os
>>> print(os.path. join('/Users/pilgrim/diveintopython3/examples/', 'humansize.py'))              β‘ 
/Users/pilgrim/diveintopython3/examples/humansize.py
>>> print(os.path.join('/Users/pilgrim/diveintopython3/examples', 'humansize.py'))               β‘‘
/Users/pilgrim/diveintopython3/examples\humansize.py
>>> print(os.path.expanduser('~'))                                                               β‘’
c:\Users\pilgrim
>>> print(os.path.join(os.path.expanduser('~'), 'diveintopython3', 'examples', 'humansize.py'))  β‘£
c:\Users\pilgrim\diveintopython3\examples\humansize.py
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Ѐункция os.path.join() составляСт ΠΏΡƒΡ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… частичных ΠΏΡƒΡ‚Π΅ΠΉ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ½Π° просто соСдиняСт строки.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4. Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ случай. Ѐункция join Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ (slash) ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΏΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Python добавляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ (backslash) вмСсто ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я запустил этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Windows. Если Π²Ρ‹ Π²Π²Π΅Π΄Ρ‘Ρ‚Π΅ Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Linux ΠΈΠ»ΠΈ Mac OS X, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ. Python ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ.
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 6. Ѐункция os.path.expanduser() раскрываСт ΠΏΡƒΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символ ~ для обозначСния домашнСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Ѐункция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Π³Π΄Π΅ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΅ΡΡ‚ΡŒ домашний ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Linux, Mac OS X ΠΈ Windows. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ Π±Π΅Π· косой Ρ‡Π΅Ρ€Ρ‚Ρ‹ Π² ΠΊΠΎΠ½Ρ†Π΅, Π½ΠΎ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ os.path.join() это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния.
  4. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 8. ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡ эти Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ для ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Ѐункция os.path.join() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π― ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» это, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ постоянно ΠΏΠΈΡΠ°Ρ‚ΡŒ Π³Π»ΡƒΠΏΡƒΡŽ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ addSlashIfNecessary(). Π’ языкС программирования Python ΡƒΠΌΠ½Ρ‹Π΅ люди ΡƒΠΆΠ΅ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈΡΡŒ ΠΎΠ± этом.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ os.path Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для разбиСния Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ, ΠΈΠΌΡ‘Π½ ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° ΠΈΡ… составныС части.

>>> pathname = '/Users/pilgrim/diveintopython3/examples/humansize.py'
>>> os.path.split(pathname)                                        β‘ 
('/Users/pilgrim/diveintopython3/examples', 'humansize.py')
>>> (dirname, filename) = os.path.split(pathname)                  β‘‘
>>> dirname                                                        β‘’
'/Users/pilgrim/diveintopython3/examples'
>>> filename                                                       β‘£
'humansize.py'
>>> (shortname, extension) = os.path.splitext(filename)            β‘€
>>> shortname
'humansize'
>>> extension
'.py'
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Ѐункция split Π΄Ρ€ΠΎΠ±ΠΈΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, содСрТащий ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ имя Ρ„Π°ΠΉΠ»Π°.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, я рассказывал ΠΏΡ€ΠΎ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π·Π° Ρ€Π°Π· ΠΈ ΠΊΠ°ΠΊ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? Ѐункция os.path.split() дСйствуСт ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ. МоТно ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ split Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΡƒ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. КаТдая ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 5. ΠŸΠ΅Ρ€Π²Π°Ρ пСрСмСнная – dirname – ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ os.path.split(), Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.
  4. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7. Вторая пСрСмСнная – filename – ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ os.path.split(), Π° ΠΈΠΌΠ΅Π½Π½ΠΎ имя Ρ„Π°ΠΉΠ»Π°.
  5. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 9. ΠœΠΎΠ΄ΡƒΠ»ΡŒ os.path Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ os. path.splitext(), которая Π΄Ρ€ΠΎΠ±ΠΈΡ‚ имя Ρ„Π°ΠΉΠ»Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, содСрТащий ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ имя ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½Π΅Π΅ для присваивания ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

3.2.3 ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

ΠœΠΎΠ΄ΡƒΠ»ΡŒ glob ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ символы-Π΄ΠΆΠΎΠΊΠ΅Ρ€Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ….

ΠœΠΎΠ΄ΡƒΠ»ΡŒ glob – это Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ инструмСнт ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python. Π­Ρ‚ΠΎ простой способ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ содСрТимоС ΠΏΠ°ΠΏΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ½ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символы-Π΄ΠΆΠΎΠΊΠ΅Ρ€Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ навСрняка Π·Π½Π°ΠΊΠΎΠΌΡ‹, Ссли Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

>>> os.chdir('/Users/pilgrim/diveintopython3/')
>>> import glob
>>> glob.glob('examples/*.xml')                  β‘ 
['examples\\feed-broken.xml',
 'examples\\feed-ns0.xml',
 'examples\\feed.xml']
>>> os.chdir('examples/')                        β‘‘
>>> glob.glob('*test*.py')                       β‘’
['alphameticstest.py',
 'pluraltest1.py',
 'pluraltest2.py',
 'pluraltest3.py',
 'pluraltest4.py',
 'pluraltest5.py',
 'pluraltest6.py',
 'romantest1.py',
 'romantest10.py',
 'romantest2.py',
 'romantest3.py',
 'romantest4.py',
 'romantest5.py',
 'romantest6.py',
 'romantest7.py',
 'romantest8.py',
 'romantest9.py']
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 3. ΠœΠΎΠ΄ΡƒΠ»ΡŒ glob ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ шаблон, содСрТащий символы-Π΄ΠΆΠΎΠΊΠ΅Ρ€Ρ‹, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΠΈ всСх Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΅ΠΌΡƒ. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ шаблон содСрТит ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ ΠΈ «*.xml«, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ всС xml-Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ examples.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сдСлаСм Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ examples. Ѐункция os.chdir() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ.
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 8. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько символов-Π΄ΠΆΠΎΠΊΠ΅Ρ€ΠΎΠ² Π² своём шаблонС. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° .py ΠΈ содСрТащиС слово test Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°.

3.2.4 ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ свСдСний ΠΎ Ρ„Π°ΠΉΠ»Π΅

Π›ΡŽΠ±Π°Ρ соврСмСнная опСрационная систСма Ρ…Ρ€Π°Π½ΠΈΡ‚ свСдСния ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ (ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅): Π΄Π°Ρ‚Π° создания, Π΄Π°Ρ‚Π° послСднСй ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ‚.Π΄. Python прСдоставляСт Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс для доступа ΠΊ этим ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌ. Π’Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»; всё, Ρ‡Ρ‚ΠΎ трСбуСтся – имя Ρ„Π°ΠΉΠ»Π°.

>>> import os
>>> print(os.getcwd())                 β‘ 
c:\Users\pilgrim\diveintopython3\examples
>>> metadata = os.stat('feed.xml')     β‘‘
>>> metadata.st_mtime                  β‘’
1247520344.9537716
>>> import time                        β‘£
>>> time.localtime(metadata.st_mtime)  β‘€
time.struct_time(tm_year=2009, tm_mon=7, tm_mday=13, tm_hour=17,
  tm_min=25, tm_sec=44, tm_wday=0, tm_yday=194, tm_isdst=1)
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ – ΠΏΠ°ΠΏΠΊΠ° с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4.feed.xml – Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ os.stat() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ„Π°ΠΉΠ»Π΅.
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 5.st_mtime – врСмя измСнСния Ρ„Π°ΠΉΠ»Π°, Π½ΠΎ записано ΠΎΠ½ΠΎ Π² уТасно Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. (ЀактичСски это количСство сСкунд, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… с Π½Π°Ρ‡Π°Π»Π° «эры UNIXΒ», Π½Π°Ρ‡Π°Π²ΡˆΠ΅ΠΉΡΡ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ сСкунду 1 января 1970 Π³ΠΎΠ΄Π°. Π‘Π΅Ρ€ΡŒΡ‘Π·Π½ΠΎ.)
  4. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7. ΠœΠΎΠ΄ΡƒΠ»ΡŒ time являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python. Он содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ прСдставлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ часовыми поясами, для прСобразования ΠΈΡ… Π² строки (str) ΠΈ Π΄Ρ€.
  5. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 8. Ѐункция time.localtime() ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ врСмя ΠΈΠ· Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° «сСкунды с Π½Π°Ρ‡Π°Π»Π° эры» (ΠΏΠΎΠ»Π΅ st_mtime, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Ρ‘Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ os. stat()) Π² Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ структуру, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π³ΠΎΠ΄, мСсяц, дСнь, час, ΠΌΠΈΠ½ΡƒΡ‚Ρƒ, сСкунду ΠΈ Ρ‚. Π΄. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Π² послСдний Ρ€Π°Π· измСнялся 13 июля 2009 Π³ΠΎΠ΄Π°, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 17 часов, 25 ΠΌΠΈΠ½ΡƒΡ‚.
# continued from the previous example
>>> metadata.st_size                              β‘ 
3070
>>> import humansize
>>> humansize.approximate_size(metadata.st_size)  β‘‘
'3.0 KiB'
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Ѐункция os.stat() Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π² свойствС st_size. Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° feed.xml – 3070 Π±Π°ΠΉΡ‚.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 5. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ свойство st_size Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ approximate_size().

3.2.5 ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ функция glob.glob() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° список ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠ΅Π»ΠΈ Π²ΠΈΠ΄ ‘examples\feed.xml‘, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π±Ρ‹Π»ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΠΎΡ€ΠΎΡ‡Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ‘romantest1.py‘. Пока Π²Ρ‹ ΠΎΡΡ‚Π°Ρ‘Ρ‚Π΅ΡΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΏΠΎ этим ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ путям ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅. Но Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΠΈΠΌΠ΅Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π΄ΠΎ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄ΠΎ Π±ΡƒΠΊΠ²Ρ‹ диска, Π²Π°ΠΌ понадобится функция os.path.realpath().

>>> import os
>>> print(os.getcwd())
c:\Users\pilgrim\diveintopython3\examples
>>> print(os.path.realpath('feed.xml'))
c:\Users\pilgrim\diveintopython3\examples\feed.xml

3.3 Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков

Π’ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… списков ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ выраТСния Python.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² списков ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ список Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту.

>>> a_list = [1, 9, 8, 4]
>>> [elem * 2 for elem in a_list]           β‘ 
[2, 18, 16, 8]
>>> a_list                                  β‘‘
[1, 9, 8, 4]
>>> a_list = [elem * 2 for elem in a_list]  β‘’
>>> a_list
[2, 18, 16, 8]
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ здСсь происходит, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ справа Π½Π°Π»Π΅Π²ΠΎ. a_list – ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ список. Python ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнты списка a_list, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ присваивая Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ elem. Π—Π°Ρ‚Π΅ΠΌ примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ elem * 2 ΠΈ добавляСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ список.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ создаёт Π½ΠΎΠ²Ρ‹ΠΉ список, Π½Π΅ измСняя исходный.
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 6. МоТно ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Python создаст Π½ΠΎΠ²Ρ‹ΠΉ список Π² памяти ΠΈ, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½, присвоит Π΅Π³ΠΎ исходной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… списков ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ выраТСния Python, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ модуля os, примСняСмыС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ.

>>> import os, glob
>>> glob.glob('*.xml')                                 β‘ 
['feed-broken.xml', 'feed-ns0.xml', 'feed.xml']
>>> [os.path.realpath(f) for f in glob.glob('*.xml')]  β‘‘
['c:\\Users\\pilgrim\\diveintopython3\\examples\\feed-broken.xml',
 'c:\\Users\\pilgrim\\diveintopython3\\examples\\feed-ns0.xml',
 'c:\\Users\\pilgrim\\diveintopython3\\examples\\feed.xml']
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Π­Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх .xml-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4. Π­Ρ‚ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список всСх .xml-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² список ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ.

ΠŸΡ€ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ списков ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значСния.

>>> import os, glob
>>> [f for f in glob.glob('*.py') if os.stat(f).st_size > 6000]  β‘ 
['pluraltest6.py',
 'romantest10.py',
 'romantest6.py',
 'romantest7.py',
 'romantest8.py',
 'romantest9.py']
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ список, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if Π² ΠΊΠΎΠ½Ρ†Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, стоящСС послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if, Π±ΡƒΠ΄Π΅Ρ‚ вычислСно для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта списка. Если это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ истинно, Π΄Π°Π½Π½Ρ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ список. Π’ Π΄Π°Π½Π½ΠΎΠΉ строкС гСнСрируСтся список всСх .py-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ этот список, оставляя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ большС 6000 Π±Π°ΠΉΡ‚. Π’Π°ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡˆΠ΅ΡΡ‚ΡŒ, поэтому Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован список ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ ΠΈΠΌΡ‘Π½ Ρ„Π°ΠΉΠ»ΠΎΠ².

ВсС рассмотрСнныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² списков использовали простыС выраТСния: ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ числа Π½Π° константу, Π²Ρ‹Π·ΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ элСмСнта списка Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (послС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ). Но ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ списков ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ выраТСния любой слоТности.

>>> import os, glob
>>> [(os.stat(f).st_size, os.path.realpath(f)) for f in glob.glob('*.xml')]            β‘ 
[(3074, 'c:\\Users\\pilgrim\\diveintopython3\\examples\\feed-broken.xml'),
 (3386, 'c:\\Users\\pilgrim\\diveintopython3\\examples\\feed-ns0.xml'),
 (3070, 'c:\\Users\\pilgrim\\diveintopython3\\examples\\feed.xml')]
>>> import humansize
>>> [(humansize.approximate_size(os.stat(f).st_size), f) for f in glob.glob('*.xml')]  β‘‘
[('3.0 KiB', 'feed-broken.xml'),
 ('3.3 KiB', 'feed-ns0.xml'),
 ('3.0 KiB', 'feed.xml')]
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Π­Ρ‚ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΡ‰Π΅Ρ‚ всС .xml-Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ os.stat()), ΠΈ создаСт ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π° ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ os.path.realpath()).
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7. Π­Ρ‚ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, основанный Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ approximate_size(), пСрСдавая Π΅ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ .xml-Ρ„Π°ΠΉΠ»Π°.

3.4 Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ словарСй

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка, Π½ΠΎ вмСсто списка ΠΎΠ½ создаСт ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

>>> import os, glob
>>> metadata = [(f, os.stat(f)) for f in glob.glob('*test*.py')]    β‘ 
>>> metadata[0]                                                     β‘‘
('alphameticstest.py', nt.stat_result(st_mode=33206, st_ino=0, st_dev=0,
 st_nlink=0, st_uid=0, st_gid=0, st_size=2509, st_atime=1247520344,
 st_mtime=1247520344, st_ctime=1247520344))
>>> metadata_dict = {f:os.stat(f) for f in glob.glob('*test*.py')}  β‘’
>>> type(metadata_dict)                                             β‘£
<class 'dict'>
>>> list(metadata_dict.keys())                                      β‘€
['romantest8.py', 'pluraltest1.py', 'pluraltest2.py', 'pluraltest5.py',
 'pluraltest6.py', 'romantest7.py', 'romantest10.py', 'romantest4.py',
 'romantest9.py', 'pluraltest3.py', 'romantest1.py', 'romantest2.py',
 'romantest3.py', 'romantest5.py', 'romantest6.py', 'alphameticstest.py',
 'pluraltest4.py']
>>> metadata_dict['alphameticstest.py'].st_size                     β‘₯
2509
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Π­Ρ‚ΠΎ Π½Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря, это Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка. Он Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .py, провСряСт ΠΈΡ… ΠΈΠΌΠ΅Π½Π°, Π° Π·Π°Ρ‚Π΅ΠΌ создаСт ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π° (вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ os.stat()).
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 3. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ списка – ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7. Π­Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря. Бинтаксис ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ синтаксису Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка, Π½ΠΎ с двумя отличиями. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ½ Π·Π°ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, Π° Π½Π΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΎΠ½ содСрТит Π΄Π²Π°, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ слСва ΠΎΡ‚ двоСточия (Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ f) являСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ словаря; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ справа ΠΎΡ‚ двоСточия (Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ os.stat(f)) – Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.
  4. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 8. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.
  5. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 10. ΠšΠ»ΡŽΡ‡ΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ словаря – это просто ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ glob.glob('*test*.py').
  6. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 16. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, связанноС с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ os.stat(). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² этом словарС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅. Один ΠΈΠ· элСмСнтов ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… (st_size) – это Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°. Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° alphameticstest.py – 2509 Π±Π°ΠΉΡ‚.

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

>>> import os, glob, humansize
>>> metadata_dict = {f:os.stat(f) for f in glob.glob('*')}                                  β‘ 
>>> humansize_dict = {os.path.splitext(f)[0]:humansize.approximate_size(meta.st_size) \     
...                   for f, meta in metadata_dict.items() if meta.st_size > 6000}          β‘‘
>>> list(humansize_dict.keys())                                                             β‘’
['romantest9', 'romantest8', 'romantest7', 'romantest6', 'romantest10', 'pluraltest6']
>>> humansize_dict['romantest9']                                                            β‘£
'6.5 KiB'
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2. Π’ этом Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ бСрётся список Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (glob.glob('*')), для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ (os.stat(f)) ΠΈ строится ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², Π° значСниями – ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4. Π­Ρ‚ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ строится Π½Π° основС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ. ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ мСньшС 6000 Π±Π°ΠΉΡ‚ (if meta.st_size > 6000). ΠžΡ‚ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ элСмСнты ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для построСния словаря, ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ (os. path.splitext(f)[0]), Π° значСниями – ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (humansize.approximate_size(meta.st_size)).
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 5. Как Π²Π°ΠΌ ΡƒΠΆΠ΅ извСстно ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, всСго имССтся ΡˆΠ΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² этом словарС ΡˆΠ΅ΡΡ‚ΡŒ элСмСнтов.
  4. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 7. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° прСдставляСт ΠΈΠ· сСбя строку, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ approximate_size().

3.4.1 Π”Ρ€ΡƒΠ³ΠΈΠ΅ интСрСсныС ΡˆΡ‚ΡƒΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² словарСй

Π’ΠΎΡ‚ Ρ‚Ρ€ΡŽΠΊ с Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ словарСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ: пСрСстановка мСстами ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ словаря.

>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> {value:key for key, value in a_dict.items()}
{1: 'a', 2: 'b', 3: 'c'}

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, это сработаСт, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли значСния элСмСнтов словаря нСизмСняСмы, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, строки ΠΈΠ»ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ.

>>> a_dict = {'a': [1, 2, 3], 'b': 4, 'c': 5}
>>> {value:key for key, value in a_dict.items()}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
TypeError: unhashable type: 'list'

3.5 Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ мноТСств

НСльзя ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π° Π±ΠΎΡ€Ρ‚ΠΎΠΌ ΠΈ мноТСства, ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – вмСсто ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΈ строятся Π½Π° основС ΠΎΠ΄Π½ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

>>> a_set = set(range(10))
>>> a_set
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> {x ** 2 for x in a_set}           β‘ 
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
>>> {x for x in a_set if x % 2 == 0}  β‘‘
{0, 8, 2, 4, 6}
>>> {2**x for x in range(10)}         β‘’
{32, 1, 2, 4, 8, 64, 128, 256, 16, 512}
  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 4. Π’ качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ мноТСств ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ мноТСства. Π­Ρ‚ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ рассчитываСт ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ мноТСства чисСл Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 9.
  2. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 6. Подобно Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ списков ΠΈ словарСй, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ мноТСств ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ условиС if для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ мноТСство.
  3. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 8. На Π²Ρ…ΠΎΠ΄ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ мноТСств ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ мноТСства, Π½ΠΎ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

3.6 ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ для дальнСйшСго чтСния

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ:

  • Mark Pilgrim. Dive Into Python 3

Π’Π΅Π³ΠΈ

PythonΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Π―Π·Ρ‹ΠΊΠΈ программирования

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ

Π­Ρ‚ΠΎΡ‚ ИИ составляСт слова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² словарС

МСня Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Π΅Ρ‚ Doodlewinkled ΠΊΠ°ΠΊ AI. Ой, Ρ‡Ρ‚ΠΎ, Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎΠ± этом словС? Π― Π½Π΅ Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ‡Π΅Ρ€ΠΏΠ°Π΅Ρ‚Π΅ свой словарный запас ΠΈΠ· Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… словарСй, составлСнных Ρ…ΡƒΠ½Π°Π½ΡŒ. Пополняю свой словарный запас этим словом doesnotexist.com.

Π”Π°, Π²Π΅Ρ€Π½ΠΎ: это словарный инструмСнт Π½Π° Π±Π°Π·Π΅ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ составляСт слова ΠΈ опрСдСлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ словарС, Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ Merriam-Webster ΠΈΠ»ΠΈ Oxford English Dictionary, — ΠΈ это просто Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Моим Ρ„Π°Π²ΠΎΡ€ΠΈΡ‚ΠΎΠΌ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Helicopterygium , ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ это опрСдСляСт это слово doesnotexist.com:

Одно ΠΈΠ· отряда микроскопичСских ΠΌΠ΅Π»ΠΊΠΈΡ… насСкомоядных насСкомых, Π² Ρ‚ΠΎΠΌ числС ΠΌΠ½ΠΎΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² ΠΈ прСсноводных бСспозвоночных, Π² Ρ‚ΠΎΠΌ числС Ρ‚Π°Ρ€Π°ΠΊΠ°Π½ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΆΠΈΠ²ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌΠΈ массами, насСкомыми, ΠΎΠ±ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ Π² Π²ΠΎΠ΄Π½Ρ‹Ρ… систСмах, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌΠΈ члСнистоногими насСкомыми.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Β«Π’Π΅Ρ€Ρ‚ΠΎΠΏΡ‚Π΅Ρ€ΠΈΠ³ΠΈΡƒΠΌΡ‹ Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹Ρ… ΠΊΡƒΠΊΠΎΠ»ΠΎΠΊ Π΄ΠΎ ΠΏΠΎΠ»Π½Ρ‹Ρ… двустворчатых моллюсков.”

НСобычный ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ слСдуСт Π΄Π°Π²Π½Π΅ΠΉ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ сгСнСрированных искусствСнным ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΠΎΠΌ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π½ΠΎΠ³ΠΈ, ΠΌΠ΅ΠΌΡ‹, Π΅Π΄Π°, кошки, объявлСния Airbnb, ΠΏΡƒΡˆΠΈΡΡ‚Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ€Π΅Ρ‚Ρ‹ ΠΈ Π΄Π°ΠΆΠ΅ люди.

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ основан Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ СстСствСнного языка Transformers ΠΈ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстном тСкстовом Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ GPT-2 Π½Π° Π±Π°Π·Π΅ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π° OpenAI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΠΎ словам ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слишком опасным для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ доступС (ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ½ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠ΅Ρ€Π΅Π΄ΡƒΠΌΠ°Π΅Ρ‚).

Каким Π±Ρ‹ Π·Π°Π±Π°Π²Π½Ρ‹ΠΌ это Π½ΠΈ Π±Ρ‹Π»ΠΎ, thisworddoesnotexist.com Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½.

ВрСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‚ΠΊΠ½ΡƒΡ‚ΡŒΡΡ Π½Π° ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ слово. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ слоТно ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ список всСх слов английского языка. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Вомас Димсон создал Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ списка, которая ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ слова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… словарях, ΠΈ пСриодичСски обновляСтся. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ шансов, Ρ‡Ρ‚ΠΎ всС эти скучныС ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ слова скоро ΡƒΠΉΠ΄ΡƒΡ‚.

А ΠΏΠΎΠΊΠ° ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ свой словарный запас Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ классными словами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π», Π½Π°ΠΆΠ°Π² здСсь.Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅Ρ‚ Ρ‚Π²ΠΎΠΈ Π½Π°Π²Ρ‹ΠΊΠΈ говорСния Π½Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‚Ρ‹, Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΊΠ°Ρ€ΠΏΠΎΡ‚ .

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ 14 мая 2020 Π³., 12:12 UTC

Микс

14 мая 2020 Π³. — 12:12 UTC

GitHub — CleverPumpkin / Proguard-Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ-Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€

Gradle Plugin, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ словари для proguard

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Android Gradle вСрсии 3.5.0 ΠΈ 3.6.0-alpha10

Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ„Π°ΠΉΠ» build.gradle :

для Groovy

 buildscript {
    Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ {
        maven {
            url "https://plugins. gradle.org/m2/"
        }
    }

    dependencies {
        ΠΏΡƒΡ‚ΡŒ ΠΊ классам "gradle.plugin.ru.cleverpumpkin.proguard-dictionaries-generator: plugin: 1.0.8"
    }
} 

для Kotlin DSL

 buildscript {
    Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ {
        maven {
            url = uri ("https: // plugins.gradle.org/m2/ ")
        }
    }
    dependencies {
        classpath ("gradle.plugin.ru.cleverpumpkin.proguard-dictionaries-generator: plugin: 1.0.8")
    }
} 

ΠŸΡ€ΠΎΡΡ‚Π°Ρ конфигурация

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² свой ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прилоТСния Ρ„Π°ΠΉΠ» build.gradle :

для Groovy

 ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½: "ru.cleverpumpkin.proguard-dictionaries-generator"

proguardDictionaries {
    DictionaryNames = [
        "сборка / класс-ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ",
        "сборка / ΠΏΠ°ΠΊΠ΅Ρ‚-ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ",
        "сборка / обфускация-ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ"
    ]
} 

для Kotlin DSL

 ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² {
    id ("ru.cleverpumpkin.proguard-словарСй-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ")
}

proguardDictionaries {
    DictionaryNames = listOf (
         "сборка / класс-ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ",
         "сборка / ΠΏΠ°ΠΊΠ΅Ρ‚-ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ",
         "сборка / обфускация-ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ"
      )
} 

Π­Ρ‚Π° установка создаст Ρ„Π°ΠΉΠ»Ρ‹ class-dictionary.txt , package-dictionary.txt
ΠΈ obfuscation-dictionary.txt Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ build модуля, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ
примСняСтся. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ любой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ корня вашСго модуля .

Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ с нуля ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сборкС, поэтому Ρƒ вас Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ словари.
для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сборки.

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ конфигурация

для Groovy

 proguardDictionaries {
    DictionaryNames = ["любой", "Ρ„Π°ΠΉΠ»Ρ‹," Π²Ρ‹ "," Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ "]
    minLineLength 20 // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 10
    maxLineLength 50 // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 30
    linesCountInDictionary 50000 // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 30000
} 

для Kotlin DSL

 proguardDictionaries {
    DictionaryNames = listOf («любой», Β«Ρ„Π°ΠΉΠ»Ρ‹Β», Β«Ρ‚Ρ‹Β», Β«Ρ…ΠΎΡ‡ΡƒΒ»)
    minLineLength = 20 // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 10
    maxLineLength = 50 // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 30
    linesCountInDictionary = 50000 // Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 30000
} 

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠ»Π°Π³ΠΈΠ½Π°

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ своим proguard-rules. pro Ρ„Π°ΠΉΠ»:

  -obfuscationdictionary build / obfuscation-dictionary.txt
-classobfuscationdictionary build / class-dictionary.txt
-packageobfuscationdictionary build / package-dictionary.txt
  

НомСр класса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, выпуск

Π’Π°ΠΆΠ½ΠΎ: , Ссли ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство классов Π² * .apk послС сТатия ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚
linesCountInDictionary Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
, Ρ‚ΠΎΠ³Π΄Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ классы Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Π·Π²Π°Π½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
начиная с ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π±ΡƒΠΊΠ² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ linesCountInDictionary Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ большС, Ρ‡Π΅ΠΌ количСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… классов послС
сТатиС ΠΊΠΎΠ΄Π°.

Π Π°Π·ΠΌΠ΅Ρ€ словаря ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ составляСт 30000 строк.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство классов Π² вашСм * .apk , Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  1. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ сборки Π² Android Studio Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ послСдний шаг Optimizing Π² консоли,
    Π΅. Π³Ρ€Π°ΠΌΠΌ. Β«ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ (Π¨Π°Π³ 5/5)Β».
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² строкС Β«ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ количСство классов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹Β».

ΠΈΠ»ΠΈ:

  1. ΠŸΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» * .apk Π² Android Studio (ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· мСню Build ->
    ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ APK … ).
  2. Π’ ΠΎΠΊΠ½Π΅ APK Analyzer Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» classes.dex . ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² строкС
    Β«Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» dex опрСдСляСт классы X …Β»
  3. Если Π² APK присутствуСт большС Ρ„Π°ΠΉΠ»ΠΎΠ² * .dex , Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈ просуммируйтС Π½ΠΎΠΌΠ΅Ρ€Π° всСх классов.

НаконСц, установитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ linesCountInDictionary Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ число
ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… классов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство для роста прилоТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Π³Ρ€Π°ΠΌΠΌ. Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит
9802 классов, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 12000).

Proguard ΠΈ R8 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚

Плагин

запускаСтся автоматичСски, ΠΊΠΎΠ³Π΄Π° ΠΏΠ»Π°Π³ΠΈΠ½ Android выполняСт Π·Π°Π΄Π°Ρ‡Ρƒ Proguard ΠΈΠ»ΠΈ R8:

  • transformClassesAndResourcesWithR8For {BuiltFlavor} {BuiltType}
  • transformClassesAndResourcesWithProguardFor {BuiltFlavor} {BuiltType}

Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ.

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°

ΠŸΡ€ΠΎΠ±Π΅Π»Ρ‹, Π·Π½Π°ΠΊΠΈ прСпинания, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ слова ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ послС Π·Π½Π°ΠΊΠ° # ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.
Π² словарях Proguard.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сгСнСрированный Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ символы, ΠΊΡ€ΠΎΠΌΠ΅ пСрСчислСнных Π²Ρ‹ΡˆΠ΅.

https://www.guardsquare.com/en/products/proguard/manual/usage#obfuscationoptions

Π’ΠΊΠ»Π°Π΄

Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ локально, Π²Π΅Ρ€Π½ΠΎ?
Для локальной сборки ΠΏΠ»Π°Π³ΠΈΠ½Π° uploadArchives ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π°Π΄Π°Ρ‡Π° gradle, которая ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠ»Π°Π³ΠΈΠ½ Π²
Папка PROJECT_DIR / plugin / pluginRepo .
Плагин Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² buildscript ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
Π’ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· послС клонирования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° локально созданный ΠΏΠ»Π°Π³ΠΈΠ½ отсутствуСт, поэтому ΠΏΠ»Π°Π³ΠΈΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ с ΠΏΠΎΡ€Ρ‚Π°Π»Π° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Gradle, поэтому artifactId Ρ€Π°Π²Π΅Π½
Π³Ρ€Π°Π΄.plugin.ru.cleverpumpkin.proguard-dictionaries-generator: ΠΏΠ»Π°Π³ΠΈΠ½
ПослС синхронизации ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ локально ΠΈ установитС artifactId Ρ€Π°Π²Π½Ρ‹ΠΌ ru.cleverpumpkin.proguard-dictionaries-generator: plugin .
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ artifactId здСсь

Авторы

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» Π‘Π΅Ρ€Π³Π΅ΠΉ Π§ΡƒΠΏΡ€ΠΈΠ½ ([email protected])
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π» Руслан Арсланов ([email protected])

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΎΡ‚ Merriam-Webster

Π³Π΅Π½ Β· эр Β· Π° Β· Ρ‚ΠΎΡ€

| \ ˈJe-nΙ™-rā-tΙ™r

\

Π°

: Аппарат, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ образуСтся ΠΏΠ°Ρ€ ΠΈΠ»ΠΈ Π³Π°Π·

Π±

: Машина, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ мСханичСская энСргия прСобразуСтся Π² ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ.

2

: матСматичСская ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, которая ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π΄Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π΅Π΅ элСмСнты.

ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ

: ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π°Ρ

Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ словаря ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ

МнС Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ…Π²Π°Ρ‚ΠΈΠ» Π±Ρ‹ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° символов.Π― сначала научился ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Python, поэтому сначала собирался Π½Π°Ρ‡Π°Ρ‚ΡŒ с Π½Π΅Π³ΠΎ. ΠŸΠ΅Ρ€Π΅Π΄ написаниСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ я Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Google ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ€Π΅ΡˆΠ°Π» Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· Python, ΠΊΠ°ΠΊ оказалось. Siph0n размСстил свой ΠΊΠΎΠ΄ Python для создания словаря ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ°Ρ… BackTrack. Π― Ρ…ΠΎΡ‚Π΅Π» Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ здСсь ΠΊΠ°ΠΊ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠΈ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ послСдствия создания словаря ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ со всСми Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ комбинациями. НиТС прСдставлСн ΠΊΠΎΠ΄ Python.

f = open (‘wordlist’, ‘w’)

def xselections (items, n):
if n == 0: yield []
else:
для i в xrange (len (items)):
для ss в xselections (items, n-1):
yield [items [i]] + ss

# Numbers = 48 — 57
# Capital = 65 — 90
# Lower = 97 — 122
numb = range (48,58)
cap = range (65,91)
low = range (97,123)
choice = 0
while int (choice) not in range (1,8):
choice = raw_input (» ‘
1) Числа
2) Π—Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹
3) Π‘Ρ‚Ρ€ΠΎΡ‡Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹
4) Π¦ΠΈΡ„Ρ€Ρ‹ + Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹
5) Π¦ΠΈΡ„Ρ€Ρ‹ + прописныС Π±ΡƒΠΊΠ²Ρ‹
6) Π¦ΠΈΡ„Ρ€Ρ‹ + Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹ + строчныС Π±ΡƒΠΊΠ²Ρ‹
7) Π—Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹ + строчныС Π±ΡƒΠΊΠ²Ρ‹
: » ‘)

choice = int (Π²Ρ‹Π±ΠΎΡ€)
Poss = []
if choice == 1:
Poss + = Numb
elif choice == 2:
Poss + = cap
elif choice == 3:
Poss + = Low
elif choice == 4 :
Poss + = Numb
Poss + = cap
Poss + = Cap
Poss + = Low
ELIF Π’Ρ‹Π±ΠΎΡ€ == 6:
Poss + = Numb
Pos + = Cap
Pos + = Low
ELIF choice == 7:
Pos + = cap
Poss + = Low

bigList = []
для i в Pos:
bigList.append (str (chr (i)))

MIN = raw_input («Каков ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ слова?Β»)
MIN = int (MIN)
MAX = raw_input («Каков ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ слова? «)
MAX = int (MAX)
для i в диапазонС (MIN, MAX + 1):
для s Π² xselections (bigList, i): f.write (». Join (s) + ‘\ n’)

Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ, Π² частности, с Python, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π²Π·ΡΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ, Π½ΠΎ я Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚Π΅Π» ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ прилоТСния. Π‘Π½Π°Ρ‡Π°Π»Π° я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ основы Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρƒ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ послСдствиям, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ врСмя, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ словаря ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ.

Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

  1. Π£ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн Python. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Linux (Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ), Ρ‚ΠΎ ΠΎΠ½, вСроятно, ΡƒΠΆΠ΅ установлСн. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Windows, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Python.
  2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ вас установлСн Python, просто скопируйтС ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π² тСкстовый Ρ„Π°ΠΉΠ» ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ passwordDictionaryGenerator.py. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .py Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ Python распознаСт ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдполагаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.
  3. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.ЕдинствСнныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, это numb, cap ΠΈ low. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ содСрТат Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ эквивалСнтов ASCII для Π±ΡƒΠΊΠ² ΠΈ Ρ†ΠΈΡ„Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания словаря. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ содСрТал Π½Π΅ a-z, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ a-k, я ΠΎΡΡ‚Π°Π²Π»ΡŽ это Π½Π° вашС усмотрСниС.
  4. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, просто Π²Π²Π΅Π΄ΠΈΡ‚Π΅

    ΠΏΠ°Ρ€ΠΎΠ»ΡŒ PythonDictionaryGenerator.py

    Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопросы ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ символов Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ насколько Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ / ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ваш ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ.ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚Π΅ Π½Π° вопросы, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚, Π½ΠΎ это Ρ‚Π°ΠΊ, ΠΎΠ½Π° Π²Π΅Ρ€Π½Π΅Ρ‚ вас ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ wordlist.

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас Π΅ΡΡ‚ΡŒ эта классная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для вас ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. Насколько большим (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠœΠ‘, Π“Π‘, Π’Π‘ ΠΈ Ρ‚. Π”.) Π‘ΡƒΠ΄Π΅Ρ‚ этот ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ? Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ потрСбуСтся Π½Π° созданиС этого словаря? Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала рассмотрим вопрос ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ врСмя.ΠšΠ»ΡŽΡ‡ΠΎΠΌ ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° являСтся матСматичСский Ρ‚Π΅Ρ€ΠΌΠΈΠ½, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ пСрСстановками. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ — это простоС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ для опрСдСлСния количСства слов для этого ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° символов ΠΈ Π΄Π»ΠΈΠ½Ρ‹ слова. ОсновноС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π½ΠΈΠΆΠ΅.

n r

n = ΠΎΠ±Ρ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, a-z + A-Z + 0-9 = 62)

r = длина слова

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ n r для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ. Π˜Ρ‚Π°ΠΊ, для пароля ΠΈΠ· 6 Ρ†ΠΈΡ„Ρ€ вашС ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

n 6 + n 5 + n 4 + n 3 + n 2 + n 1 = всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ наш Π½Π°Π±ΠΎΡ€ символов — это a-z (n = 26), Π° наш ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π½Π΅ Π΄Π»ΠΈΠ½Π½Π΅Π΅ 6 (r = 1-6) Ρ†ΠΈΡ„Ρ€. Бколько слов Π±ΡƒΠ΄Π΅Ρ‚ Π² нашСм словарС?

26 6 + 26 5 + 26 4 + 26 3 + 26 2 + 26 1 = 321 272 406 = ΠΎΠ±Ρ‰Π΅Π΅ количСство слов

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство слов Π² нашСм словарС.Как это связано с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ? По большСй части, Ссли Π΄Π»ΠΈΠ½Π° пароля Ρ€Π°Π²Π½Π° x, Ρ‚ΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ… Π±ΡƒΠ΄Π΅Ρ‚ x + 1 для этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ строки. Π—Π°Ρ‚Π΅ΠΌ всС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ n r Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ строки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ для этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, поэтому, надСюсь, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ это проясняСт.

Π― создал этот ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, это заняло ΠΎΠΊΠΎΠ»ΠΎ 30 ΠΌΠΈΠ½ΡƒΡ‚. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ€Π°Π·ΠΌΠ΅Ρ€ совпал с ΠΌΠΎΠΈΠΌΠΈ расчСтами.

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас Π΅ΡΡ‚ΡŒ основная Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° для расчСта Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ словаря. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π²Π΅ΡΡ‚ΡŒ нашС Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²ΠΎ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

  • Π½Π°Π±ΠΎΡ€ символов = a – z, A – Z ΠΈ 0–9
  • Π΄Π»ΠΈΠ½Π° пароля = 1-8
  • ΠΏ = 62
  • Π³ = 1-8

Π‘ этими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ нашСго словаря увСличиваСтся Π΄ΠΎ 1800 Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ 1,8 ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚Π°. ВзглянитС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½ΠΈΠΆΠ΅.

Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ быстро Ρ€Π°Π·ΠΌΠ΅Ρ€ увСличиваСтся. НС знаю, ΠΊΠ°ΠΊ Π²Ρ‹, Π½ΠΎ Ρƒ мСня Π½Π΅Ρ‚ Π΄Π²ΡƒΡ…ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚Π½ΠΎΠ³ΠΎ диска. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ этот ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ просто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π― подсчитал врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, вСроятно, потрСбуСтся для создания этого словаря, ΠΎΠ½ΠΎ составило ΠΎΠΊΠΎΠ»ΠΎ 11 Π΄Π½Π΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, врСмя Π½Π° созданиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ словаря — Π½ΠΈΡ‡Ρ‚ΠΎ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с объСмом памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ для Π΅Π³ΠΎ размСщСния. Мало Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я Π½Π΅ знаю, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ большой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ создании словаря.

Π― ΠΎΡΡ‚Π°Π²Π»ΡŽ Π½Π° вашС усмотрСниС расчСт Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для создания этих словарСй. Основная идСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ python для пароля ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ установлСнного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΊΡΡ‚Ρ€Π°ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚ΡƒΠ΄Π°. По большСй части, врСмя Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, Π²Π°ΠΆΠ½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ концСпциях, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я здСсь Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ. ИдСя создания пароля ΠΏΡ€ΠΈΡˆΠ»Π° ΠΊΠΎ ΠΌΠ½Π΅ ΠΈ ΠΌΠΎΠΈΠΌ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΎ способах тСстирования бСспроводной инфраструктуры WPA. ΠΡ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ WPA ΠΌΠΎΠΆΠ½ΠΎ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, поэтому ΠΌΡ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π»ΠΈ ΠΎ создании словаря для этого.Π§Π΅Ρ€Π΅Π· нСсколько часов ΠΌΡ‹ вскорС осознали ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания Ρ‚Π°ΠΊΠΎΠ³ΠΎ большого словаря. На самом Π΄Π΅Π»Π΅ это Π±Ρ‹Π»Π° Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ слоТно Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ доступа WPA со слоТным ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ. Renderman ΠΈ Π¦Π΅Ρ€ΠΊΠΎΠ²ΡŒ Wi-Fi Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ мСня ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ нСсколько Ρ€Π°Π΄ΡƒΠΆΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ вашСй Ρ‚ΠΎΡ‡ΠΊΠΈ доступа WPA. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, Π»ΡƒΡ‡ΡˆΠ΅ всСго ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Β«ΠΎΠ±Ρ‰ΠΈΠΌΠΈΒ» паролями, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ нСпростая Π·Π°Π΄Π°Ρ‡Π°.

ΠœΠΎΡ€Π°Π»ΡŒ этой истории — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ слоТныС ΠΏΠ°Ρ€ΠΎΠ»ΠΈ с высоким Π½Π°Π±ΠΎΡ€ΠΎΠΌ символов, Π½ΠΎ Π²Ρ‹ это ΡƒΠΆΠ΅ Π·Π½Π°Π»ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я просто ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° нСсколько бСсполСзна, Π½Ρƒ, это Ρ‚Π°ΠΊ, Π½ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для создания нСбольшого словаря, Π½ΠΎ ΠΎ большом словарС (большС ΠΏΠ°Ρ€Ρ‹ Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚), вСроятно, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ€Π΅Ρ‡ΠΈ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ²Ρ‹ ваши Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΌΠ½Π΅ всСгда интСрСсно вашС ΠΌΠ½Π΅Π½ΠΈΠ΅. Бчастливого Π²Π·Π»ΠΎΠΌΠ°.

ΠžΡΠ½ΠΎΠ²Ρ‹ Python: ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списков, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ словаря ΠΈ выраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Одним ΠΈΠ· основных прСимущСств Python ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования являСтся Π΅Π³ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄.Однако Π΄Π°ΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ самого языка Python Π΅ΡΡ‚ΡŒ способы ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ элСгантный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π±ΠΎΠ»Π΅Π΅ эффСктивно. БоставлСниС списков, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ словаря ΠΈ выраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° — Ρ‚Ρ€ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‚Π°ΠΊΠΈΡ… элСгантных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ этом постС ΠΌΡ‹ рассмотрим Ρ†ΠΈΠΊΠ»Ρ‹ for, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списков, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ словаря ΠΈ выраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ вашС врСмя ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Python.

БоставлСниС списков ΠΈ словарСй Π² Python

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ основы Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списками ΠΈ словарями, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ для -ΠΏΠ΅Ρ‚Π΅Π»ΡŒ.

для — ΠΏΠ΅Ρ‚Π»ΠΈ

Π’ Python Ρ†ΠΈΠΊΠ» for- идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π·Π°Π΄Π°Ρ‡ программирования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ список, ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ»ΠΈ строка.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования списка:

  слов = ['ΠΊΠΎΡ‚', 'ΠΎΠΊΠ½ΠΎ', 'мяч']  

для x ΠΏΡ€ΠΎΠΏΠΈΡΡŒΡŽ:

print (x)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ — ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт выводится ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС:

  ΠΊΠΎΡ‚  

ΠΎΠΊΠ½ΠΎ

мяч

По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ с Π±ΠΎΠ»Π΅Π΅ слоТным для -Ρ†ΠΈΠΊΠ»ΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ составляСтС список понятий ΠΈ словаря, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ, ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ Π·Π° Π½ΠΈΠΌΠΈ.

Π¦ΠΈΠΊΠ» для Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, бСря ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ (Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ случаС — список) ΠΈ провСряя, сущСствуСт Π»ΠΈ ΠΎΠ½. Если это Ρ‚Π°ΠΊ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ дСйствиС выполняСтся (Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ случаС ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ). Π—Π°Ρ‚Π΅ΠΌ Ρ†ΠΈΠΊΠ» начинаСтся снова ΠΈ ΠΈΡ‰Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт. Если этот элСмСнт сущСствуСт, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ дСйствиС выполняСтся снова. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ повторяСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ пСрСстанут Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ элСмСнты ΠΈ Ρ†ΠΈΠΊΠ» Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ.

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ range ()

ΠžΡ‡Π΅Π½ΡŒ полСзная функция range () являСтся встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Python ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с для -Ρ†ΠΈΠΊΠ»ΠΎΠ².По сути, Π΅Π³ΠΎ Ρ†Π΅Π»ΡŒ — ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

  для i в диапазонС (5):  

print (i)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

  0  

1

2

3

4

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ функция range () начинаСтся с 0, поэтому range (5) Π²Π΅Ρ€Π½Π΅Ρ‚ числа ΠΎΡ‚ 0 Π΄ΠΎ 4, Π° Π½Π΅ ΠΎΡ‚ 1 Π΄ΠΎ 5.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ начинаСтся с 0, увСличиваСтся с шагом 1 ΠΈ заканчиваСтся ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ числом. Однако ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, послСдний элСмСнт ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ шага ΠΊΠ°ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (first, last, step_size).

БоставлСниС списков

ПониманиС списков

обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ элСгантный способ создания списков, Ρ‡Π΅ΠΌ для Ρ†ΠΈΠΊΠ»ΠΎΠ² , Π° Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ списки ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… списков.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ списков состоят ΠΈΠ· скобок, содСрТащих Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ for, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ [Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-элСмСнт для элСмСнта Π² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅] ΠΈΠ»ΠΈ [x для x Π² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅] , Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ дальнСйшиС для ΠΈΠ»ΠΈ , Ссли ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ: [элСмСнт-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для элСмСнта Π² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅, Ссли условно] .

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚:

  x = [i для i в диапазонС (10)]  

Π’Ρ‹Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

И с использованиСм условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

  x = [i для i в диапазонС (10), Ссли i> 5]  

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список:

  [6, 7, 8, 9]  

, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ выполняСтся условиС i> 5 .

Помимо Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ списки Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ ΠΈ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹, Ρ‡Π΅ΠΌ ΠΈΡ… эквивалСнты for-loop, ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС.

ΠŸΠΎΠ½ΡΡ‚ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… списков

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅, транспонированиС ΠΈ сглаТиваниС списков списков становится Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ прСдставлСниями списков. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΈ элСмСнтов Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ прСдставлСниям ΠΎ списках, просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ снова, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΉΡ‚ΠΈ Π΅Ρ‰Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π³Π»ΡƒΠ±ΠΆΠ΅.

Для дСмонстрации рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  [(x, y) для x в [1,2,3] для y в [3,1,4], Ссли x! = Y]  

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

  [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]  

Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ выраТСния ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ слоТныС выраТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ списков.

НапримСр:

  from math import pi # import pi number from math module  

[str (round (pi, i)) for i in range (1, 6)]

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚:

  [Β«3,1Β», Β«3,14Β», Β«3,142Β», Β«3,1416Β», Β«3,14159Β»]  

ПониманиС списков

идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для создания Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Ρ… строк ΠΊΠΎΠ΄Π°. Π˜Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π° -Ρ†ΠΈΠΊΠ»Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ map (), filter (), ΠΈ reduce () , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСстС с лямбда-функциями.

Волкования словаря

Π’ Python ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ словаря ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списка — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для словарСй. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ элСгантный ΠΌΠ΅Ρ‚ΠΎΠ΄ создания словаря ΠΈΠ· ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ словаря ΠΈΠ»ΠΈ прСобразования ΠΎΠ΄Π½ΠΎΠ³ΠΎ словаря Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Бинтаксис Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ синтаксису, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌΡƒ для понимания списка, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ {ΠΊΠ»ΡŽΡ‡: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-элСмСнт для элСмСнта Π² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅}, , Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (ΠΊΠ»ΡŽΡ‡: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) .

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания словаря.Код ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ

  dict ([(i, i + 10) for i in range (4)])  

, Ρ‡Ρ‚ΠΎ эквивалСнтно :

  {i: i + 10 для i в диапазонС (4)}  

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

  {0: 10, 1: 11, 2: 12, 3: 13}  

Π—Π° этим Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ синтаксисом Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ для ΠΈΠ»ΠΈ , Ссли прСдлоТСния : {ΠΊΠ»ΡŽΡ‡: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-элСмСнт для элСмСнта Π² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ΠΏΡ€ΠΈ условии} .

ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if позволяСт ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ значСния для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ словаря.

НапримСр:

  {i: i + 10 для i в диапазонС (10), Ссли i> 5}  

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚:

  {6: 16, 7: 17, 8: 18, 9: 19}  

Подобно пониманию списков, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ словаря Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΌΠΎΡ‰Π½ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ для -Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Для -Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ для -Ρ†ΠΈΠΊΠ»ΠΎΠ², Π² частности, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ слоТным ΠΈ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ.ПониманиС словаря ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ способ написания ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π°, облСгчая Π΅Π³ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.

ПониманиС Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ словаря

Π’ Python ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ словаря Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ для создания ΠΎΠ΄Π½ΠΎΠ³ΠΎ понимания словаря Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

НапримСр:

  {(k, v): k + v для k в диапазонС (2) для v в диапазонС (2)}  

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚:

  {(0, 0): 0, (0, 1): 1, (1, 0): 1, (1, 1): 2}  

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны ΠΏΡ€ΠΈ использовании Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² словаря со слоТной структурой словаря.Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ словаря Ρ‚Π°ΠΊΠΆΠ΅ услоТняСтся ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ свСсти Π½Π° Π½Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΎΡ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ, понятный ΠΊΠΎΠ΄.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Python

ВыраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

— Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ способа написания ΠΊΠΎΠ΄Π° Π±ΠΎΠ»Π΅Π΅ эффСктивно, Ρ‡Π΅ΠΌ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π° основС классов. Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ выраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала посмотрим, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π° основС классов Π² Python часто многословны ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов.Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, автоматичСски сокращая Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ; обычная функция опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° yield, Π° Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ yield приостанавливаСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ сохраняСт Π΅Π΅ локальноС состояниС, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ΡΡ с Ρ‚ΠΎΠ³ΠΎ мСста, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Когда вызываСтся функция Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΎΠ½Π° Π½Π΅ выполняСтся Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

  • Код Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ΠΎ next () .

  • ПослС Π²Ρ‹Π·ΠΎΠ²Π° yield ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ пСрСдаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС, ΠΈ функция приостанавливаСтся.

  • Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ состояниС ΠΈΡ… выполнСния ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ.

  • StopIteration вызываСтся автоматичСски ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ:

  def gen ():  

для x в диапазонС (10):

yield x ** 2

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

ВыраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ созданиС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» Π±Π΅Π· использования ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова yield ΠΈ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹, Ρ‡Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Π’ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ:

  г = (x ** 2 для x в диапазонС (10))  

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° цСнная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² — это ΠΈΡ… ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты ΠΏΠΎ условиям.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ :

  gen_exp = (i ** 2 для i в диапазонС (10), Ссли i> 5)  

для i в gen_exp:

print (i)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚:

  36  

49

64

81

ВыраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ² прСдставлСний списков

Бинтаксис Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΡ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° синтаксис составлСния списков, СдинствСнная Ρ€Π°Π·Π½ΠΈΡ†Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок вмСсто ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ….

НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ:

  (i ** 2 для i в диапазонС (10), Ссли i> 5)  

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это со списком, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся ΠΊΠ°ΠΊ:

  [i ** 2 для i в диапазонС (10), Ссли i> 5]  

Однако ΠΎΠ½ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списка Π²Π΅Ρ€Π½Π΅Ρ‚ вСсь список, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π₯отя значСния Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² спискС, доступ ΠΊ Π½ΠΈΠΌ осущСствляСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ next () .

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния скорости, составлСниС списков ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ быстрСС, Ρ‡Π΅ΠΌ выраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, хотя ΠΈ Π½Π΅ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ доступной памяти. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ этому, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ производят значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ запросу, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ прСдставлСний списков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ памяти для создания всСго списка, выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивны с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния памяти.

ВыраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

идСально подходят для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ всС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сразу ΠΈΠ»ΠΈ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для всСх Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹.Они Ρ‚Π°ΠΊΠΆΠ΅ идСально подходят для прСдставлСния бСсконСчных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт, Ρ‡Ρ‚ΠΎ устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ нСвозмоТности ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ бСсконСчный ΠΏΠΎΡ‚ΠΎΠΊ Π² памяти.

Как ΠΈ Π² случаС составлСния списков, Π²Π°ΠΌ слСдуСт ΠΎΠΏΠ°ΡΠ°Ρ‚ΡŒΡΡ использования Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТны Π΄ΠΎ Ρ‚Π°ΠΊΠΎΠΉ стСпСни, Ρ‡Ρ‚ΠΎ ΠΈΡ… становится Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ.

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

Π¦ΠΈΠΊΠ»Ρ‹ for Python

ΠΎΡ‡Π΅Π½ΡŒ Ρ†Π΅Π½Π½Ρ‹ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π·Π°Π΄Π°Ρ‡ программирования, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π²Π°ΠΌ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π±ΠΎΠ»Π΅Π΅ эффСктивно.ПониманиС списков ΠΈ словаря являСтся ΠΌΠΎΡ‰Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ для -Ρ†ΠΈΠΊΠ»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ПониманиС списков ΠΈ словарСй Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ для чтСния, Π½ΠΎ ΠΈ быстрСС, Ρ‡Π΅ΠΌ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ для -Ρ†ΠΈΠΊΠ»ΠΎΠ². Однако ΠΊΠ»ΡŽΡ‡ ΠΊ успСху состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΈΠΌ ΡΡ‚Π°Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ слоТными, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ сводили Π½Π° Π½Π΅Ρ‚ прСимущСства ΠΈΡ… использования Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ выраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ простой способ создания ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ синтаксис ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ пониманию списков, выраТСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ запросу, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ всСго списка Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ мСньшС памяти ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ эффСктивны.

Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ — npm

Π‘ΠΎΠ»Π΅Π΅ 50 000 000 ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ ΠΈΠΌΠ΅Π½ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½?

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ — это Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΡƒΠ·Π»ΠΎΠ² для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайных ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½.

Он поставляСтся со списком словарСй «ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ», Π½ΠΎ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свои собствСнныС.

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Π­Ρ‚Π° докумСнтация ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ v4.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 3.x, см.
v3 Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Для вСрсий 1 ΠΈ 2, поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ
v2 Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° v4

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ со старой вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° v4, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ руководство ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

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

ΠŸΡ€Π΅Π΄ΠΏΠΎΡΡ‹Π»ΠΊΠΈ

Для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° трСбуСтся NodeJS (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ вСрсия 6) ΠΈ NPM.Node ΠΈ NPM Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просты Π² установкС.
Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ доступны Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅,
ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

 $ node --version
ВСрсия 7.10.1

$ npm --version
4.2.0 

Установка

ΠŸΠ•Π Π•Π” Π£Π‘Π’ΠΠΠžΠ’ΠšΠžΠ™: , поТалуйста, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ условиями

УстановитС ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ npm ΠΈΠ»ΠΈ Yarn

 $ npm Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ i -S 

Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ пряТу

 $ пряТа Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ 

ИспользованиС

 const {uniqueNamesGenerator, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅} = require ('Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½');

const randomName = uniqueNamesGenerator ({словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅]}); // big_red_donkey

const shortName = uniqueNamesGenerator ({
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°], // Ρ†Π²Π΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ
  Π΄Π»ΠΈΠ½Π°: 2
}); // большой осСл 

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° машинописного тСкста

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

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const customConfig: Config = {
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°],
  Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ: '-',
  Π΄Π»ΠΈΠ½Π°: 2,
};

const randomName: string = uniqueNamesGenerator ({
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅]
}); // big_red_donkey

const shortName: строка = uniqueNamesGenerator (customConfig); // большой осСл 

API

uniqueNamesGenerator (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку со случайным сгСнСрированным ΠΈΠΌΠ΅Π½Π΅ΠΌ

Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹

Π’ΠΈΠΏ: ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

словари

Вип: массив

трСбуСтся: ΠΏΡ€Π°Π²Π΄Π°

Π­Ρ‚ΠΎ массив словарСй.ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ — это массив строк, содСрТащих слова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания строки.

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ словари ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ прСдоставлСны Π² ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΌ порядкС.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const shortName: string = uniqueNamesGenerator ({
  словари: [Ρ†Π²Π΅Ρ‚Π°, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅]
}); // red_big_donkey 

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ словарях ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ.

сСпаратор

Π’ΠΈΠΏ: строка

трСбуСтся: лоТь

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: _

Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ строк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для раздСлСния сгСнСрированных слов.
Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ — _ .

Π΄Π»ΠΈΠ½Π°

Π’ΠΈΠΏ: Π½ΠΎΠΌΠ΅Ρ€

трСбуСтся: лоТь

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 3

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ — 3 , ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ имя, состоящСС ΠΈΠ· 3 слов.Π­Ρ‚ΠΈ значСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ количСству ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… словарСй (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 3) ΠΈΠ»ΠΈ Π±Ρ‹Ρ‚ΡŒ мСньшими.
Установка Π΄Π»ΠΈΠ½Ρ‹ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4 Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли прСдоставлСно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 3 словаря.

ΡΡ‚ΠΈΠ»ΡŒ

Π’ΠΈΠΏ: Π½ΠΈΠΆΠ½ΠΈΠΉ корпус | upperCase | ΠΊΠ°ΠΏΠΈΡ‚Π°Π»

трСбуСтся: лоТь

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ — lowerCase ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ имя Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС.
Если ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ upperCase , слова Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ со всСми Π±ΡƒΠΊΠ²Π°ΠΌΠΈ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС.ΠžΠΏΡ†ΠΈΡ capital Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ слово ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹

.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const capitalizedName: string = uniqueNamesGenerator ({
  словари: [Ρ†Π²Π΅Ρ‚Π°, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅],
  ΡΡ‚ΠΈΠ»ΡŒ: 'ΠΊΠ°ΠΏΠΈΡ‚Π°Π»'
}); // Red_Big_Donkey

const upperCaseName: string = uniqueNamesGenerator ({
  словари: [Ρ†Π²Π΅Ρ‚Π°, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅],
  ΡΡ‚ΠΈΠ»ΡŒ: 'Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр'
}); // RED_BIG_DONKEY

const lowerCaseName: string = uniqueNamesGenerator ({
  словари: [Ρ†Π²Π΅Ρ‚Π°, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅],
  ΡΡ‚ΠΈΠ»ΡŒ: 'Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр'
}); // red_big_donkey 
сСмСна

Π’ΠΈΠΏ: Π½ΠΎΠΌΠ΅Ρ€

трСбуСтся: лоТь

ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ число ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ имя.Пока прСдоставлСнноС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ число ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, сгСнСрированноС имя Ρ‚Π°ΠΊΠΆΠ΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅.

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ

Числа

Π­Ρ‚ΠΎ динамичСский ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ чисСл»

.

ΠŸΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅

Бписок ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 1400 ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… для использования

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const config: Config = {
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅]
}

const characterName: string = uniqueNamesGenerator (config); // большой 
Π–ΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅

Бписок ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 350 ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, animals} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const config: Config = {
  словари: [ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅]
}

const characterName: string = uniqueNamesGenerator (config); // осСл 
Π¦Π²Π΅Ρ‚Π°

Бписок ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 50 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ²

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, colors} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const config: Config = {
  словари: [Ρ†Π²Π΅Ρ‚Π°]
}

const characterName: string = uniqueNamesGenerator (config); // красный 
Π‘Ρ‚Ρ€Π°Π½Ρ‹

Бписок ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 250 Ρ€Π°Π·Π½Ρ‹Ρ… стран

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, countries} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const config: Config = {
  словари: [страны]
}

const characterName: string = uniqueNamesGenerator (config); // ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ АрабскиС Π­ΠΌΠΈΡ€Π°Ρ‚Ρ‹ 
ИмСна

Бписок ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 4900 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, names} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const config: Config = {
  словари: [ΠΈΠΌΠ΅Π½Π°]
}

const characterName: string = uniqueNamesGenerator (config); // Π’Π°ΠΉΠ½ΠΎΠ½Π° 
Π―Π·Ρ‹ΠΊΠΈ

Бписок языков

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, languages} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const config: Config = {
  словари: [языки]
}

const characterName: string = uniqueNamesGenerator (config); // ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ»ΡŒ 
Π—Π²Π΅Π·Π΄Π½Ρ‹Π΅ Π²ΠΎΠΉΠ½Ρ‹

Бписок ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 80 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ пСрсонаТСй ΠΈΠ· Β«Π—Π²Π΅Π·Π΄Π½Ρ‹Ρ… Π²ΠΎΠΉΠ½

Β».

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, starWars} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const config: Config = {
  словари: [Π·Π²Π΅Π·Π΄Π½Ρ‹Π΅ Π²ΠΎΠΉΠ½Ρ‹]
}

const characterName: string = uniqueNamesGenerator (config); // Π₯Π°Π½ Π‘ΠΎΠ»ΠΎ 

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ поставляСтся с 3 словарями ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
сразу.Однако, начиная с вСрсии 4 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ словари Π²
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.
Π­Ρ‚ΠΎ сдСлано для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ встряхивания Π΄Π΅Ρ€Π΅Π²Π° для удалСния Π»ΠΈΡˆΠ½ΠΈΡ… словарСй ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΊΠΎΠ³Π΄Π°
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ нСстандартныС.

Новый синтаксис для использования словарСй ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const config: Config = {
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅]
}

const characterName: string = uniqueNamesGenerator (config); // red_big_donkey 

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ словари

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свои собствСнныС словари, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания Π²Π°ΡˆΠΈΡ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½,
для удовлСтворСния Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ вашСго бизнСса.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ словарСй.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const starWarsCharacters = [
  'Π₯Π°Π½ Π‘ΠΎΠ»ΠΎ',
  "Π”ΠΆΠ°Π±Π±Π° Π₯Π°Ρ‚Ρ‚",
  'R2-D2',
  "Π›ΡŽΠΊ Π‘ΠΊΠ°ΠΉΡƒΠΎΠΊΠ΅Ρ€",
  'ΠŸΡ€ΠΈΠ½Ρ†Π΅ΡΡΠ° ЛСя ΠžΡ€Π³Π°Π½Π°'
];
const colors = [
  "Π—Π΅Π»Π΅Π½Ρ‹ΠΉ", "красный", "ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ", "Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ"
]

const characterName: string = uniqueNamesGenerator ({
  словари: [Ρ†Π²Π΅Ρ‚Π°, пСрсонаТи Π·Π²Π΅Π·Π΄Π½Ρ‹Ρ… Π²ΠΎΠΉΠ½],
  Π΄Π»ΠΈΠ½Π°: 2,
  Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ: ' '
}); // Π—Π΅Π»Π΅Π½Ρ‹ΠΉ Π›ΡŽΠΊ Π‘ΠΊΠ°ΠΉΡƒΠΎΠΊΠ΅Ρ€ 

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ чисСл

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ случайныС числа Π²Π½ΡƒΡ‚Ρ€ΠΈ своСго ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° словаря Numbers.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, NumberDictionary} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const numberDictionary = NumberDictionary.generate ({мин: 100, макс: 999});
const characterName: string = uniqueNamesGenerator ({
словари: [['Dangerous'], ['Snake'], numberDictionary],
  Π΄Π»ΠΈΠ½Π°: 3,
  Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ: '',
  ΡΡ‚ΠΈΠ»ΡŒ: 'ΠΊΠ°ΠΏΠΈΡ‚Π°Π»'
}); // Опасная змСя123 

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ чисСл API

Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку со случайным сгСнСрированным числом ΠΎΡ‚ 1 Π΄ΠΎ 999

Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹

Π’ΠΈΠΏ: ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

ΠΌΠΈΠ½

Π’ΠΈΠΏ: Π½ΠΎΠΌΠ΅Ρ€

трСбуСтся: лоТь

ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 1

МинимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ ΠΊΠ°ΠΊ случайноС число

макс

Π’ΠΈΠΏ: Π½ΠΎΠΌΠ΅Ρ€

трСбуСтся: лоТь

ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 999

МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ ΠΊΠ°ΠΊ случайноС число

Π΄Π»ΠΈΠ½Π°

Π’ΠΈΠΏ: Π½ΠΎΠΌΠ΅Ρ€

трСбуСтся: лоТь

Π”Π»ΠΈΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ случайно сгСнСрированного числа.

Установка Π΄Π»ΠΈΠ½Ρ‹ 3 всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ случайноС число ΠΎΡ‚ 100 Π΄ΠΎ 999 . Π­Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ установка 100 ΠΈ 999 ΠΊΠ°ΠΊ ΠΌΠΈΠ½. ΠΈ макс. Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Если Π·Π°Π΄Π°Π½ΠΎ, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π»ΡŽΠ±Ρ‹Π΅ прСдоставлСнныС ΠΎΠΏΡ†ΠΈΠΈ ΠΌΠΈΠ½. ΠΈ макс. .

ОбъСдинСниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈ прСдоставлСнных словарСй

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ словари, прСдоставлСнныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.
ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… прямо Π² своСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const ImprovedAdjectives = [
  ... ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅,
  'Π°Π±Ρ€Π°Π·ΠΈΠ²Π½Ρ‹ΠΉ',
  'Π΄Π΅Ρ€Π·ΠΊΠΈΠΉ',
  'чСрствый',
  'Π³Π»ΡƒΠΏΡ‹ΠΉ',
  "эксцСнтричный",
];
const xMen = [
'ProfessorX',
'Π·Π²Π΅Ρ€ΡŒ',
'колосс',
'Ρ†ΠΈΠΊΠ»ΠΎΠΏ',
'лСдяной Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ',
'Росомаха',
];

const characterName: string = uniqueNamesGenerator ({
  словари: [SuperiorAdjectives, color, xMen],
  Π΄Π»ΠΈΠ½Π°: 2,
  Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ: '-'
}); // эксцСнтричный синий лСдяной Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ 

Руководство ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

Руководство ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ с вСрсии 3 Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ 4

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ v4 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ критичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ

словари ΠΊΠΎΠ½Ρ„ΠΈΠ³

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ словари.
Π­Ρ‚ΠΎ сдСлано для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ гибкости ΠΈ возмоТности встряхивания Π΄Π΅Ρ€Π΅Π²Π° для удалСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… словарСй ΠΈΠ·
Ρ€Π°Π·ΠΌΠ΅Ρ€ вашСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ словарях Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ.

вСрсия 3

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const randomName = uniqueNamesGenerator (); // big_red_donkey 

вСрсия 4

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const config: Config = {
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅]
}

const randomName = uniqueNamesGenerator (конфигурация); // big_red_donkey 

Руководство ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ с вСрсии 1 ΠΈΠ»ΠΈ 2

Π’ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ v3 Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ нСсколько критичСских ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.Если Π²Ρ‹ обновляСтС свою Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с вСрсии 1 ΠΈΠ»ΠΈ 2, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсно ΡƒΠ·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

uniqueNamesGenerator

Π’Π΅ΠΏΠ΅Ρ€ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° прСдоставляСтся массив словарСй Π² соотвСтствии с
v4 критичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

вСрсия 2

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const randomName = uniqueNamesGenerator (); 

вСрсия 4

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const config: Config = {
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅]
}

const randomName = uniqueNamesGenerator (конфигурация); // big_red_donkey 
Π‘Π΅ΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€

вСрсия 2

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const shortName = uniqueNamesGenerator ('-'); // большой красный осСл 

вСрсия 4

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const config: Config = {
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅],
  Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ: '-'
}

const shortName = uniqueNamesGenerator (конфигурация); // большой красный осСл 
ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ

Бвойство short Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° length , поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ любоС количСство слов

вСрсия 2

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator} ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½;

const shortName = uniqueNamesGenerator (истина); // большой осСл 

вСрсия 4

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {uniqueNamesGenerator, Config, ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…} ΠΈΠ· Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β»;

const config: Config = {
  словари: [ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ†Π²Π΅Ρ‚Π°, ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅],
  Π΄Π»ΠΈΠ½Π°: 2
}

const shortName = uniqueNamesGenerator (конфигурация); // большой осСл 

Π’ΠΊΠ»Π°Π΄

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π”ΠžΠŸΠžΠ›ΠΠ˜Π’Π•Π›Π¬ΠΠž.md, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ нашСм кодСксС повСдСния ΠΈ ΠΎ процСссС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π°ΠΌ запросов Π½Π° вытягиваниС.

  1. Π’ΠΈΠ»ΠΊΠ°!
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ: git checkout -b my-new-feature
  3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ свои измСнСния: git add.
  4. ЗафиксируйтС измСнСния: git commit -am 'Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ'
  5. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² Π²Π΅Ρ‚ΠΊΡƒ: git push origin my-new-feature
  6. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос Π½Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ 😎

ЛицСнзия

ЛицСнзия MIT Β© АндрСа Π‘ΠΎΠ½Π½ΠΈ

Авторы

Бпасибо этим Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ людям (смайлик):

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ соотвСтствуСт спСцификации всСх участников.Π›ΡŽΠ±Ρ‹Π΅ поТСртвования ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ!

Бписок, Π½Π°Π±ΠΎΡ€, словарныС выраТСния Π² Python | Π˜Π½Π΄Ρ…ΡƒΠΌΠ°Ρ‚ΠΈ ЧСллия | Аналитика Π’ΠΈΠ΄Ρ…ΡŒΡ

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ списках, словарях, Π½Π°Π±ΠΎΡ€Π°Ρ… Π² Python.

Π€ΠΎΡ‚ΠΎ ΠšΠ°Ρ€Π° Идс Π½Π° Unsplash

Понимания в Python:

ПониманиС состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄Π½ΠΎ для прСдлоТСния ΠΈ ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ для ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ для ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ .

Π’ Python Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ понимания.

Π’ΠΈΠΏΡ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΉ Π² Python (Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ изобраТСния: Автор)

БоставныС части списков:

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

Бинтаксис:

[Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для элСмСнта Π² ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ, Ссли условноС]

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, слоТными выраТСниями, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ функциями ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ списка.

Π­Ρ‚ΠΎ эквивалСнтно

  для элСмСнта   Π² ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ : 
, Ссли условноС:
Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π’ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°:

Бписок

ИспользованиС понимания списка:

ПониманиС списка состоит ΠΈΠ· скобок [] , содСрТащих Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт для прСдлоТСния , Π·Π°Ρ‚Π΅ΠΌ ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ для ΠΈΠ»ΠΈ для ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ . Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ список, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΡ†Π΅Π½ΠΊΠΈ выраТСния Π² контСкстС для ΠΈ , Ссли Π·Π° Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ прСдлоТСния .

ОбъяснСниС понимания списка (Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ изобраТСния: Π°Π²Ρ‚ΠΎΡ€)

1. ПониманиС списка ΠΈ Ρ†ΠΈΠΊΠ» for.

ΠŸΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «ПониманиС списка» ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π΅Π½ ΠΈ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ†ΠΈΠΊΠ»ΠΎΠΌ for.

НахоТдСниС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° чисСл с использованиСм понимания списка ΠΈ Ρ†ΠΈΠΊΠ»Π° for:

Ρ†ΠΈΠΊΠ»Π° for vs ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списка

2. ПониманиС списка vs Ρ„ΠΈΠ»ΡŒΡ‚Ρ€.

filter:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ· Ρ‚Π΅Ρ… элСмСнтов iterable , для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true. итСрация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

Поиск Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл с использованиСм понимания списка ΠΈ filter ():

Анализ списка ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ()

3. ПониманиС списка ΠΈ ΠΊΠ°Ρ€Ρ‚Π°.

map:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ , давая Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

НахоТдСниС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° чисСл с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ понимания списка ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ ():

ПониманиС списка ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ ()

4.Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ списков.

БоставлСниС списка ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ for.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1 : Π‘Π³Π»Π°Π΄ΠΈΡ‚ΡŒ список, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списка с двумя прСдлоТСниями Β«forΒ»:

Π‘Π³Π»Π°Π΄ΠΈΡ‚ΡŒ список, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ списка

5. УсловиС мноТСствСнного if Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ списка.

БоставлСниС списка ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ if.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: НахоТдСниС чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСлятся Π½Π° 2 ΠΈ 3.

БоставлСниС списка с использованиСм Π΄Π²ΡƒΡ… условий if

6.Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ Π² прСдставлСнии списка.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ списка.

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

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