πŸ” Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС сочСтания python: простой ΠΈ эффСктивный способ

Π’Π°ΠΌ понадобится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ itertools для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сочСтаний Π² Python. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

import itertools

items = ['a', 'b', 'c', 'd']
combinations = []

for r in range(1, len(items) + 1):
    combinations.extend(itertools.combinations(items, r))

print(combinations)

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° модуля itertools ΠΈ создаСт список элСмСнтов (items). Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ» for для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сочСтаний, начиная с ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта ΠΈ Π΄ΠΎ Π΄Π»ΠΈΠ½Ρ‹ списка items. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сочСтаний ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ список combinations. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ΄Π°, список сочСтаний выводится Π½Π° экран.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС сочСтания Π² Python

Π’ Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ itertools для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ элСмСнтов. Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сочСтания ΠΈΠ· списка ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

1. БочСтания Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ combinations(). Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ.


import itertools

numbers = [1, 2, 3]
result = list(itertools.combinations(numbers, 2))

print(result)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм список чисСл [1, 2, 3]. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ combinations() с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 2, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΈΠ· Π΄Π²ΡƒΡ… чисСл. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:


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

2. БочСтания с повторСниями

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с повторСниями, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ combinations_with_replacement(). Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ combinations(), Π½ΠΎ позволяСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ элСмСнты Π² комбинациях.


import itertools

letters = ['A', 'B', 'C']
result = list(itertools.combinations_with_replacement(letters, 2))

print(result)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ список Π±ΡƒΠΊΠ² ['A', 'B', 'C']. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ combinations_with_replacement() с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 2, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ всС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с повторСниями:


[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

3. ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСстановки, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ permutations(). Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ пСрСстановки:


import itertools

letters = ['A', 'B', 'C']
result = list(itertools.permutations(letters, 2))

print(result)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ список Π±ΡƒΠΊΠ² ['A', 'B', 'C']. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ permutations() с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 2, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ всС пСрСстановки ΠΈΠ· Π΄Π²ΡƒΡ… Π±ΡƒΠΊΠ²:


[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

4. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ combinations() ΠΈΠ»ΠΈ combinations_with_replacement() ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ filter(). НапримСр, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π΄Π»ΠΈΠ½Ρ‹ 3:


import itertools

numbers = [1, 2, 3, 4]
result = list(filter(lambda x: len(x) == 3, itertools.combinations(numbers, 3)))

print(result)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ список чисСл [1, 2, 3, 4]. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ combinations() для получСния всСх ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, оставляя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π΄Π»ΠΈΠ½Ρ‹ 3:


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

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΠΎΠ΄ΡƒΠ»ΡŒ itertools являСтся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ инструмСнтом для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сочСтаниями Π² Python. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ combinations(), combinations_with_replacement() ΠΈ permutations() для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ filter(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ВсС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ элСмСнтов массива с Python. ΠœΠΎΠ΄ΡƒΠ»ΡŒ Itertools

12 Бписки ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π½ΠΈΠΌΠΈ Python

ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΈΠΊΠ° - Π»Π΅Π³ΠΊΠΎ | Π“Π°ΠΉΠ΄ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ itertools | Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° Π•Π“Π­

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ инициализация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Python? 🐍 Π£Π·Π½Π°ΠΉΡ‚Π΅ всС подробности здСсь!

πŸ” Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ sum ΠΏΠΈΡ‚ΠΎΠ½?

πŸ”’ Как ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ числа Π² Python: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

πŸ” Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС сочСтания python: простой ΠΈ эффСктивный способ

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ символа python: руководство с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

πŸ”Ž Как ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ 2 массива python: Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ инструкции

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠΈΡ‚ΠΎΠ½Π° хСйтят? 🐍