Size: a a a

Сообщество Python Программистов

2021 February 14

in Сообщество Python Программистов
Либо itertools.accumulate
источник

in Сообщество Python Программистов
а, блин, вру
источник

TD

Tilted plus Depresse... in Сообщество Python Программистов
понятно, а нету случайно примера как += в компрехеншен используется?
ну просто чтоб знать на всякий
источник

in Сообщество Python Программистов
Tilted plus Depressed
понятно, а нету случайно примера как += в компрехеншен используется?
ну просто чтоб знать на всякий
list comprehension используется для создания списков
источник

in Сообщество Python Программистов
Tilted plus Depressed
Ну например
s = 0
for number in numbers:
  if number != 0:
      s += 1
что-то в таком духе
Тут ты не создаёшь список
источник

in Сообщество Python Программистов
Tilted plus Depressed
Ну например
s = 0
for number in numbers:
  if number != 0:
      s += 1
что-то в таком духе
len([n for n in numbers if n])
Можно вот так, если уж приспичило с компрехом
источник

in Сообщество Python Программистов
Тут больше подойдет functools.reduce
Можно редьюсом:
reduce(lambda s, n: s + bool(n), numbers)
источник

AT

Alexander T in Сообщество Python Программистов
𝕬𝖗𝖙𝖊𝖒
Контест на 100 кармы

Вам предоставляется массив положительных целых чисел, представляющих цены одной акции в разные дни (каждый индекс в массиве представляет разные дни). Вам также дается целое число transaction_number, которое представляет собой количество транзакций, которые вы можете совершить. Одна сделка состоит из покупки акции в данный день и продажи в другой, в более поздний день.

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

Обратите внимание, что вы можете одновременно владеть только одной акцией; другими словами, вы не можете купить более одной акции в любой данный день, и вы не можете купить акцию, если вы все еще владеете другой акцией. Кроме того, Вам не нужно использовать все кол-во разрешенные транзакции.


Пример:

Input:
prices = [5, 11, 3, 50, 60, 90]
transaction_number = 2

Output:
93 // Buy: 5, Sell: 11; Buy: 3, Sell: 90
шортить можно?
источник

𝕬

𝕬𝖗𝖙𝖊𝖒 in Сообщество Python Программистов
Alexander T
шортить можно?
Да
источник

pl

peach lasagna in Сообщество Python Программистов
@entressi можешь ,пазязя, кинуть примеров использования rply для создания ast ? я чет не хочу уже своими руками писать это... слишком сложно. Те примеры, что нашел, либо 1+1*1 , либо вообще без примеров использования.
источник

pl

peach lasagna in Сообщество Python Программистов
дока слишком маленькая
источник

А

Айван in Сообщество Python Программистов
Tilted plus Depressed
Ну например
s = 0
for number in numbers:
  if number != 0:
      s += 1
что-то в таком духе
sum(map(bool, numbers))) 🌚
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
𝕬𝖗𝖙𝖊𝖒
Ну да, ну да)
Шо, ну я могу просто перебором жахнуть)
источник

AT

Alexander T in Сообщество Python Программистов
𝕬𝖗𝖙𝖊𝖒
Контест на 100 кармы

Вам предоставляется массив положительных целых чисел, представляющих цены одной акции в разные дни (каждый индекс в массиве представляет разные дни). Вам также дается целое число transaction_number, которое представляет собой количество транзакций, которые вы можете совершить. Одна сделка состоит из покупки акции в данный день и продажи в другой, в более поздний день.

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

Обратите внимание, что вы можете одновременно владеть только одной акцией; другими словами, вы не можете купить более одной акции в любой данный день, и вы не можете купить акцию, если вы все еще владеете другой акцией. Кроме того, Вам не нужно использовать все кол-во разрешенные транзакции.


Пример:

Input:
prices = [5, 11, 3, 50, 60, 90]
transaction_number = 2

Output:
93 // Buy: 5, Sell: 11; Buy: 3, Sell: 90
сами сделки надо печатать или достаточно результат?
источник

𝕬

𝕬𝖗𝖙𝖊𝖒 in Сообщество Python Программистов
Alexander T
сами сделки надо печатать или достаточно результат?
Только результат
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
Шо, ну я могу просто перебором жахнуть)
Но перебором некрасиво
источник

AT

Alexander T in Сообщество Python Программистов
𝕬𝖗𝖙𝖊𝖒
Только результат
import operator

prices = [5, 11, 3, 50, 60, 90]
transaction_number = 2

def neighbours(arr, i):
   res = []
   if i < len(arr) - 1:
       res.append(arr[i + 1])
   if i > 0:
       res.append(arr[i - 1])
   return res

def _extremums(func, name):
   def inner(arr):
       return {(name, i, x) for i, x in enumerate(arr) if all(func(x, y) for y in neighbours(arr, i))}
   return inner

lows = _extremums(operator.lt, 'low')
highs = _extremums(operator.gt,  'high')

extremums = sorted(lows(prices) | highs(prices), key=lambda x: x[1])
print(sum(x[1] for x in sorted(((i, abs(x[2] - y[2])) for i, (x, y) in enumerate(zip(extremums, extremums[1:]))), key=lambda x: x[1])[-transaction_number:]))
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Alexander T
import operator

prices = [5, 11, 3, 50, 60, 90]
transaction_number = 2

def neighbours(arr, i):
   res = []
   if i < len(arr) - 1:
       res.append(arr[i + 1])
   if i > 0:
       res.append(arr[i - 1])
   return res

def _extremums(func, name):
   def inner(arr):
       return {(name, i, x) for i, x in enumerate(arr) if all(func(x, y) for y in neighbours(arr, i))}
   return inner

lows = _extremums(operator.lt, 'low')
highs = _extremums(operator.gt,  'high')

extremums = sorted(lows(prices) | highs(prices), key=lambda x: x[1])
print(sum(x[1] for x in sorted(((i, abs(x[2] - y[2])) for i, (x, y) in enumerate(zip(extremums, extremums[1:]))), key=lambda x: x[1])[-transaction_number:]))
Ля, я только хотел написать про поиск экстремумов)
источник

AT

Alexander T in Сообщество Python Программистов
на твоем примере работает а там хоть трава не расти
источник

in Сообщество Python Программистов
Alexander T
import operator

prices = [5, 11, 3, 50, 60, 90]
transaction_number = 2

def neighbours(arr, i):
   res = []
   if i < len(arr) - 1:
       res.append(arr[i + 1])
   if i > 0:
       res.append(arr[i - 1])
   return res

def _extremums(func, name):
   def inner(arr):
       return {(name, i, x) for i, x in enumerate(arr) if all(func(x, y) for y in neighbours(arr, i))}
   return inner

lows = _extremums(operator.lt, 'low')
highs = _extremums(operator.gt,  'high')

extremums = sorted(lows(prices) | highs(prices), key=lambda x: x[1])
print(sum(x[1] for x in sorted(((i, abs(x[2] - y[2])) for i, (x, y) in enumerate(zip(extremums, extremums[1:]))), key=lambda x: x[1])[-transaction_number:]))
95 получилось
источник