Получение пар: один элемент и остальные по списку Python - PullRequest
2 голосов
/ 10 июля 2019

Я хочу сделать это

from some_cool_library import fancy_calculation

arr = [1,2,3,4,5]
for i, item in enumerate(arr):
    the_rest = arr[:i] + arr[i+1:]
    print(item, fancy_calculation(the_rest))


[Expected output:] # some fancy output from the fancy_calculation
12.13452134
2416245.4315432
542.343152
15150.1152
10.1591

Но мне интересно, есть ли более питонный способ или существующая библиотека для получения пар, как показано выше.

Проблема с текущей реализацией заключается в том,что нам нужно на O (n) больше памяти для переменной the_rest.Есть ли способ, как мы можем сделать это без дополнительного выделения памяти?

for item, the_rest in some_cool_function(arr):
    print(item, fancy_calculation(the_rest))

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

С точки зрения "питоничности" и читабельности, я бы сказал, что с вашим кодом все в порядке.

Если вас интересует распределение списка в цикле, вы можете оптимизировать его следующим образом:

arr = [1,2,3,4,5]

the_rest = arr[1:]
for i, item in enumerate(arr):
    print(item, fancy_calculation(the_rest))

    if i < len(arr) - 1:
        the_rest[i] = arr[i]

Помните, что: fancy_calculation будет получать одну и ту же ссылку на список в каждой итерации, поэтому: (а) не изменяйте ее и (б) не откладывайте вычисления (например, отдельный поток потребителя)так как содержимое изменится в следующей итерации.

0 голосов
/ 10 июля 2019

если вам нужен только остаток (как видно из ваших правок), вы можете использовать itertools.combinations, чтобы получить все комбинации с определенным количеством элементов, например:

from itertools import combinations

arr = [1, 2, 3, 4, 5]

for combination in combinations(arr, len(arr)-1):
    print(sum(combination))

ПРИМЕЧАНИЕ. Порядок обратный тому, что вы указали. Если порядок имеет значение, вы можете отменить arr перед использованием arr[::-1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...