Python Найдите сумму по крайней мере 2 чисел

#python #python-3.x #list #dictionary #sum

Вопрос:

Например, если у меня есть список чисел , [1, 2, 3, 4] как мне получить словарь из двух или более чисел и сумму этих чисел? Идеальный словарь, который я ищу, выглядит так:

 num = [1, 2, 3]
ideal_dict = {[1,2]:3, [1, 3]:4, [1, 4]:5, [2, 3]:5, [2, 4]:6, [3, 4]:7, [1, 2, 3]:6, [2, 3, 4]:9, [1, 2, 3, 4]:10}
 

Я бы хотел, чтобы ваш метод работал с очень большими числами, которые не находятся в последовательности. «не в последовательности» означает, что не все числа являются последовательными. Примером списка не в последовательности является [5, 3, 4, 8, 9] .

Спасибо вам за ваше время и внимание.

Комментарии:

1. Переполнение стека-это не служба написания кода. Ожидается, что вы покажете свою существующую попытку решить проблему и конкретно объясните, где вы застряли. Например, можете ли вы написать код, чтобы , учитывая один из ключей для ideal_dict , вычислить значение? Можете ли вы написать код для создания комбинаций из определенного количества значений num ? Можете ли вы написать код, чтобы использовать эти комбинации для заполнения ideal_dict ? Можете ли вы написать код, чтобы повторить этот процесс для каждого количества значений (от 2 до общей длины num )? Можете ли вы соединить эти шаги вместе? Что случилось, когда ты попытался?

2. Я вообще не знаю, как это сделать. никаких идей. вот почему я задал этот вопрос.

Ответ №1:

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

 # original number list
numbers = (1,3,24,53,3565,474,23,2,546,27,578, 76,976)

# target dictonary
dict = {}

for i in range(len(numbers)):
    for j in range(len(numbers)):
        value = numbers[i]   numbers[j]
        dict[(i,j)] = value


print(dict)
 

Ответ №2:

Это может быть решено с помощью некоторой логики рецептов itertools (функция powerset).

Комментарии:

1. Если это действительно отвечает на вопрос ОП, то вопрос, вероятно, дубликат.

Ответ №3:

Вы можете использовать комбинации itertools, как показано ниже:

 from itertools import combinations
  
def combo(arr, r):
    return list(combinations(arr, r))

arr = [1, 2, 3, 4]
r = [2, 3, 4]
for rr in r:
    print (combo(arr, rr))
 

из:

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