#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)]