Как найти все возможные комбинации диапазона в Python? - PullRequest
0 голосов
/ 21 июня 2020

Это скорее математический вопрос, чем Python, но если у меня есть диапазон от 0 до 100, как я могу go перебирать все возможные диапазоны в этом? Например, нижняя граница может быть 0, а верхняя - от 1 до 100 и т. Д.

Может ли что-то вроде этого охватывать все возможности?

Ответы [ 3 ]

1 голос
/ 21 июня 2020
  1. Checkout itertools.combinations :
itertools.combinations(iterable, r)

Возвращает подпоследовательности элементов длиной r из итерируемого ввода.

Комбинированные кортежи выдаются в лексикографическом порядке c в соответствии с порядком> итерируемого ввода. Таким образом, если входной итерабельный элемент отсортирован,> комбинационные кортежи будут созданы в отсортированном порядке.

Элементы рассматриваются как уникальные на основании их положения, а не их значения. Итак,> если входные элементы уникальны, в каждой> комбинации не будет повторяющихся значений.

import itertools
arr = list(itertools.combinations(range(1,100), 2))
Использование циклов For

циклов For

arr = []
for i in range(1,101):
    for j in range(1,101):
        arr.append((i,j))
print(arr)
0 голосов
/ 21 июня 2020

Если вы хотите реализовать что-то свое (не хотите использовать itertools, как указано в других ответах), вот что-то, что будет работать:

lower = 0
upper = 10

for range_size in range(1, upper-lower+1):
  for j in range(lower, upper):
    if j+range_size > upper:
      break
    print(f"Range: [{j}, {j+range_size}]")

Внешний l oop выполняет итерацию всех возможных size диапазонов, которые могут быть от 1 до upper - lower. Обратите внимание, что +1 должен убедиться, что верхний предел также включен в range.

Внутренний l oop затем начинается с границы lower и print всех диапазонов размера range_size.

Изменить: Если вы хотите получить отсортированный вывод, например itertools.combinations, вы можете сохранить значения в массиве и отсортировать этот массив.

0 голосов
/ 21 июня 2020

Ваши вопросы - это, по сути, все комбинации двух чисел от 0 до 100. Итак, 100 выбирают 2 разные комбинации. Python имеет itertools.combinations для этого:

for lower, upper in itertools.combinations(range(100), 2):
    # do something with lower and upper
...