Δημοσιεύτηκε: 28 Ιουν 2011, 12:34
από sv1jsb
arkanoid έγραψε:
Κώδικας: Επιλογή όλων

def centered_average(nums):
min, max = nums[0], nums[0]
for i in nums:
if i >= max:
max = i
if i <= min:
min = i
sum = 0
for i in nums:
sum = sum + i
sum = sum - (min + max)
return (sum / (len(nums) - 2))


"Μαζεύοντας" λίγο τον κώδικα του arkanoid θα πρότεινα το εξής:
Κώδικας: Επιλογή όλων

def centered_average(nums):
min, max, sum = nums[0], nums[0], nums[0]
for i in nums[1:]:
if i >= max:
max = i
if i <= min:
min = i
sum +=i
sum = sum - (min + max)
return (sum / (len(nums) - 2))

Ξεκινάμε από το πρώτο στοιχείο του πίνακα και το βάζουμε στις μεταβλητές μας min max και sum.
To loop μας οπότε χρειάζεται να ξεκινήσει από την επόμενη (δεύτερη) θέση, γι' αυτό και το [1:] στο for.
Αφού σε κάθε loop προσθέτουμε την τιμή στο sum δεν χρειάζεται το δεύτερο loop.
(Έχω την εντύπωση ότι κάπου είχα διαβάσει ότι οι τελεστές +=,-= είναι πιο γρήγοροι από τις αντίστοιχες πράξεις, οπότε ίσως θα ήταν καλύτερα
το sum=sum-(min+max), να γίνει:
sum-=min
sum-=max
δύο εντολές δηλαδή αντί μίας)