Вывести уникальные значения из списка те которые попадают в диапазон n<10000
Есть список от сортированный по убыванию, как сделать так чтобы в диапазон до 10000 влезли только уникальные элементы списка,пока сделал, что он дублирует значения, если циклом while...
n = 10000
lst = [5240, 2130, 1200, 1000, 820, 600, 500, 400, 300, 200, 100, 40, 20, 10]
for x in lst:
while n>x:
n-=x
print(x, end = ' ')
выводит: 5240 2130 2130 400 40 40 10
а надо чтобы выводил: 5240 2130 1200 1000 400 20 10
P.S. вот вроде так ну выводит все равно одинаковые..
Ответы (3 шт):
Автор решения: Alexey Sinitsky
→ Ссылка
Вот как-то так получилось, видимо, не все гладко, ну соображал сам местами, подсмотрел только, как сортировать словарь по значению:
# вводим килограммы:
n = int(input())*1000
print(n)
things = {'карандаш': 20, 'зеркальце': 100, 'зонт': 500, 'рубашка': 300,
'брюки': 1000, 'бумага': 200, 'молоток': 600, 'пила': 400, 'удочка': 1200,
'расческа': 40, 'котелок': 820, 'палатка': 5240, 'брезент': 2130, 'спички': 10}
# тут подсмотрел как отсортировать словарь по убыванию значений,
# чтобы выводились ключи также по убыванию:
sorted_things = {keys:things[keys] for keys in sorted(things ,key=things.get, reverse=True)}
print(sorted_things)
#
# делаем значения:
lst = things.values()
# сортируем:
lst = sorted(lst)
# сортируем по убыванию:
lst = lst[::-1]
print(lst)
#
# #lst = [5240, 2130, 1200, 1000, 820, 600, 500, 400, 300, 200, 100, 40, 20, 10]
#
arr = []
# делаем список значений, которые отсортированы по убыванию:
for x in lst:
if n>=x:
n-=x
#print(x, end = ' ')
arr.append(x)
print(arr)
#
# выводим словарь из списка значений:
out = [key for key, value in sorted_things.items() if value in arr]
#
# распаковываем его в строчку:
print(*out)
Автор решения: Fox Fox
→ Ссылка
Есть список:
lst = [5240, 2130, 1200, 1000, 820, 600, 500, 400, 300, 200, 100, 40, 20, 10]
В этом списке УЖЕ уникальные значения! И все они меньше 10000! Вот код, который исполняет буквально то, что Вы заказали:
n = 10000
lst = [5240, 2130, 2130, 1200, 1000, 820, 600, 500, 400, 300, 200, 100, 40, 20, 10]
print(*sorted(set(filter(lambda x: x < 10000, lst)), reverse=True))
Вот результат:
5240 2130 1200 1000 820 600 500 400 300 200 100 40 20 10
Если бы в исходном списке были дубли, они были бы убраны.
Автор решения: Stanislav Volodarskiy
→ Ссылка
Задачу в вопросе надо формулировать полностью:
things = {'карандаш': 20, 'зеркальце': 100, 'зонт': 500, 'рубашка': 300,
'брюки': 1000, 'бумага': 200, 'молоток': 600, 'пила': 400, 'удочка': 1200,
'расческа': 40, 'котелок': 820, 'палатка': 5240, 'брезент': 2130, 'спички': 10}
lst = sorted(((v, k) for k, v in things.items()), reverse=True)
n = int(input()) * 1000
for w, t in lst:
if n >= w:
n -= w
print(t, end=' ')
print()
$ echo 10 | python rucksack.py палатка брезент удочка брюки пила карандаш спички