2017-07-14 3 views

Antwort

4

Es ist eine einfache Liste Verständnis (beachten Sie, ich bin asuming Sie alle Ihre Werte als float s wollen, anstatt eine Mischung aus int s und float e):

>>> lst = [0,2,3,5,6,7,9] 
>>> [(a + b)/2.0 for a,b in zip(lst, lst[1:])] 
[1.0, 2.5, 4.0, 5.5, 6.5, 8.0] 

(durch 2.0 Boden Teilung gewährleisten teilungs nicht 2 in Python angewandt)

1
values = [0,2,3,5,6,7,9] 
middle_values = [(values[i] + values[i + 1])/2.0 for i in range(len(values) - 1)] 

Dividing von 2.0 statt 2 ist nicht notwendig, in Python 3, oder wenn Sie from __future__ import division zu chang verwenden e das ganzzahlige Teilungsverhalten.

Die zip oder itertools.izip Antworten sind idiomatischer.

0

[(l[i]+l[i+1])/2 for i in range(len(l)-1)]

0

Einfache for-Schleife:

nums = [0,2,3,5,6,7,9] 
betweens = [] 
for i in range(1, len(nums)): 
    if nums[i] - nums[i-1] > 1: 
     betweens.extend([item for item in range(nums[i-1]+1, nums[i])]) 
    else: 
     betweens.append((nums[i] + nums[i-1])/2) 

Ausgabe wird, wie gewünscht, die keine weitere Umwandlung benötigt (in Python3.x):

[1, 2.5, 4, 5.5, 6.5, 8] 
+0

Was ist dieser' extend' Zweig des bedingten Versuchs zu tun? –

+0

Umm, was ist 'if nums [i] - nums [i-1]> 1:' und 'between.extend (Element für Element im Bereich (nums [i-1], nums [i])' für? Nirgendwo in Die Frage hat das OP gesagt, dass Zahlen mit einem Unterschied von mehr als 1 anders behandelt werden sollten. –

+0

@Rawing Um mehrere Zahlen dazwischen zu behandeln. –

1

obligatorische itertools Lösung:

>>> import itertools 
>>> values = [0,2,3,5,6,7,9] 
>>> [(a+b)/2.0 for a,b in itertools.izip(values, itertools.islice(values, 1, None))] 
[1.0, 2.5, 4.0, 5.5, 6.5, 8.0] 
3

Verwenden Sie eine for-Schleife:

>>> a = [0,2,3,5,6,7,9] 
>>> [(a[x] + a[x + 1])/2 for x in range(len(a)-1)] 
[1.0, 2.5, 4.0, 5.5, 6.5, 8.0] 

jedoch zip mit als @Chris_Rands sagte besser ... (und besser lesbar ¬¬)

Verwandte Themen