Elimde [1,2,3,4,5...]
gibi bir sayı listesi var ve ben (1+2)/2
ve ikincisi için (2+3)/2
ve üçüncüsünü hesaplamak istiyorum,
(3+4)/2
, ve böyle devam eder. Bunu nasıl yapabilirim?
İlk sayıyı ikinciyle toplamak ve 2'ye bölmek, sonra ikinciyi üçüncüyle toplamak ve 2'ye bölmek ve bu şekilde devam etmek istiyorum.
Ayrıca, bir sayı listesini nasıl toplayabilirim?
a = [1, 2, 3, 4, 5, ...]
Öyle mi?
b = sum(a)
print b
bir numara almak için?
Bu bende işe yaramıyor.
Soru 1: Yani (eleman 0 + eleman 1) / 2, (eleman 1 + eleman 2) / 2, ... vb. istiyorsunuz.
İki liste yaparız: biri ilk öğe hariç her öğeden, diğeri de son öğe hariç her öğeden. O zaman istediğimiz ortalamalar, iki listeden alınan her bir çiftin ortalamasıdır. İki listeden çiftleri almak için zip
kullanırız.
Giriş değerleriniz tamsayı olmasına rağmen sonuçta ondalık sayıları görmek istediğinizi varsayıyorum. Python varsayılan olarak tamsayı bölme işlemi yapar: kalanı atar. Bir şeyleri tamamen bölmek için kayan noktalı sayılar kullanmamız gerekir. Neyse ki, bir int'i bir float'a bölmek bir float üretecektir, bu yüzden bölenimiz için 2
yerine sadece 2.0
kullanırız.
Böylece:
averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]
Soru 2:
Bu sum
kullanımı iyi çalışmalıdır. Aşağıdaki çalışır:
a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45
Ayrıca, yol boyunca her adımda her şeyi bir değişkene atamanıza gerek yoktur. print sum(a)` gayet iyi çalışır.
Tam olarak ne yazdığınız ve nasıl çalışmadığı konusunda daha spesifik olmanız gerekecektir.
Sayıların toplam listesi:
sum(list_of_nums)
Bir list comprehension kullanarak n ve n - 1'in yarısını hesaplama (kalıbı doğru anladıysam):
[(x + (x - 1)) / 2 for x in list_of_nums]
Bitişik öğeleri toplama, örneğin ((1 + 2) / 2) + ((2 + 3) / 2) + ... reduce ve lambdas kullanarak
reduce(lambda x, y: (x + y) / 2, list_of_nums)