- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
def delta( listToDelta ):
result = []
lastItem = listToDelta[0]
for i, item in enumerate(listToDelta):
if i == 0:
result.append(item)
else:
result.append(item-lastItem)
lastItem = item
return result
l = [2, 4, 6, 9, 7]
print(l)
l = delta(l)
print(l)
Fai 30.08.2011 22:18 # 0
Lure Of Chaos 30.08.2011 22:37 # 0
Lure Of Chaos 30.08.2011 22:39 # +2
Fai 30.08.2011 22:43 # +1
python-style - universal_function('delta-encode')
Lure Of Chaos 30.08.2011 22:46 # +2
Fai 30.08.2011 23:17 # +3
TheHamstertamer 04.10.2011 18:40 # 0
something{БЛОК™™™}
roman-kashitsyn 31.08.2011 08:57 # +1
roman-kashitsyn 08.04.2012 15:03 # 0
roman-kashitsyn 31.08.2011 09:59 # +2
roman-kashitsyn 31.08.2011 09:00 # +1
Esper 31.08.2011 13:58 # 0
Понятно, какой язык приучает: а) думать, б) думать алгоритмами.
roman-kashitsyn 31.08.2011 14:09 # +2
Esper 31.08.2011 14:28 # +1
roman-kashitsyn 31.08.2011 14:32 # +1
Esper 31.08.2011 14:51 # −2
Опыт C++0x показывает, что пусть уж лучше скобочки берут числом, чем разнообразием )
roman-kashitsyn 31.08.2011 15:00 # +1
gegMOPO4 31.08.2011 16:25 # 0
roman-kashitsyn 31.08.2011 16:38 # −1
gegMOPO4 31.08.2011 17:06 # 0
или
roman-kashitsyn 31.08.2011 17:15 # 0
CPPGovno 31.08.2011 17:42 # +1
Fai 31.08.2011 17:44 # 0
Yuuri 29.04.2013 13:35 # 0
guest 29.01.2013 10:41 # +1
Питон и только он.
guest 29.10.2011 05:01 # 0
>>> # Результат выполнения авторского говнокода:
>>> print delta(l)
[2, 2, 2, 3, -2]
>>> # Как оптимально
>>> print [x2-x1 for x1, x2 in zip([0]+l, l+[0])][:-1]
[2, 2, 2, 3, -2]
>>> # Можно ещё так:
>>> from operator import sub
>>> print map(lambda x: -sub(*x), zip([0]+l, l+[0])[:-1])
[2, 2, 2, 3, -2]
>>> # Вот так делать не надо, мне было интересно поломать голову над использованием reduce:
>>> print reduce(lambda x,y: [y-x,y] if type(x)==int else x[:-1]+[-x.pop()+y,y],[0]+l)[:-1]
[2, 2, 2, 3, -2]
guest 29.10.2011 05:27 # −1
Вот оперативно исправленные версии...
print [x-y for x,y in zip(l,[0]+l)]
from operator import sub
print map(lambda x: sub(*x), zip(l,[0]+l))
print reduce(lambda x,y: [y-x,y] if type(x)==int else x[:-1]+[-x.pop()+y,y],[0]+l)[:-1]
meridium 30.10.2011 04:59 # −1
meridium 29.10.2011 23:55 # 0
anonimb84a2f6fd141 01.05.2013 10:47 # 0
O(len(l))
anonimb84a2f6fd141 01.05.2013 10:46 # −1
Кто это? (Не отвечайте. Вопрос риторический.)