Jumlah daftar bilangan di Python

Saya memiliki daftar nomor seperti [1,2,3,4,5...], dan saya ingin menghitung (1+2)/2 dan untuk kedua, (2+3)/2 dan yang ketiga, (3+4)/2, dan sebagainya. Bagaimana saya bisa melakukan itu?

Saya ingin menjumlahkan angka pertama dengan yang kedua dan membaginya dengan 2, maka jumlah kedua dengan yang ketiga dan dibagi dengan 2, dan seterusnya.

Juga, bagaimana saya bisa jumlah daftar nomor?

a = [1, 2, 3, 4, 5, ...]

Itu:

b = sum(a)
print b

untuk mendapatkan satu nomor?

Ini doesn't bekerja untuk saya.

Mengomentari pertanyaan (3)

Pertanyaan 1: Sehingga anda inginkan (0 elemen + elemen 1) / 2, (1 unsur + unsur 2) / 2, ... dll.

Kami membuat dua daftar: satu dari setiap elemen kecuali yang pertama, dan satu dari setiap elemen kecuali yang terakhir. Kemudian rata-rata yang kita inginkan adalah rata-rata dari masing-masing pasangan yang diambil dari dua daftar. Kita menggunakan zip untuk mengambil pasangan dari dua daftar.

Saya asumsikan anda ingin melihat desimal pada hasil, meskipun nilai-nilai masukan adalah bilangan bulat. Secara default, Python melakukan pembagian integer: membuang sisa. Untuk membagi hal-hal semua cara mereka, kita perlu menggunakan angka floating-point. Untungnya, membagi int float akan menghasilkan float, jadi kita hanya menggunakan 2.0 untuk kami pembagi bukan 2.

Dengan demikian:

averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]

Pertanyaan 2:

Bahwa penggunaan uang harus bekerja dengan baik. Pekerjaan-pekerjaan sebagai berikut:

a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45

Juga, anda don't perlu untuk menetapkan segala sesuatu untuk sebuah variabel pada setiap langkah di sepanjang jalan. mencetak jumlah(a) bekerja dengan baik.

Anda akan memiliki untuk lebih spesifik tentang apa yang anda tulis dan bagaimana hal itu isn't bekerja.

Komentar (4)

Jumlah daftar nomor:

sum(list_of_nums)

Menghitung setengah dari n dan n - 1 (jika saya memiliki pola yang benar), menggunakan daftar pemahaman:

[(x + (x - 1)) / 2 for x in list_of_nums]

Jumlah unsur-unsur yang berdekatan, misalnya ((1 + 2) / 2) + ((2 + 3) / 2) + ... menggunakan kurangi dan lambdas

reduce(lambda x, y: (x + y) / 2, list_of_nums)
Komentar (3)

Pertanyaan 2: Untuk jumlah daftar bilangan bulat:

a = [2, 3, 5, 8]
sum(a)
# 18
# or you can do:
sum(i for i in a)
# 18

Jika daftar berisi bilangan bulat sebagai string:

a = ['5', '6']
# import Decimal: from decimal import Decimal
sum(Decimal(i) for i in a)
Komentar (2)

Anda dapat mencoba cara ini:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sm = sum(a[0:len(a)]) # Sum of 'a' from 0 index to 9 index. sum(a) == sum(a[0:len(a)]
print(sm) # Python 3
print sm  # Python 2
Komentar (1)
>>> a = range(10)
>>> sum(a)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'int' object is not callable
>>> del sum
>>> sum(a)
45

Tampaknya bahwa uang yang telah ditetapkan dalam kode di suatu tempat dan menimpa fungsi default. Jadi saya dihapus dan masalah ini diselesaikan.

Komentar (0)

Menggunakan sederhana daftar-pemahaman dan jumlah:

>> sum(i for i in range(x))/2. #if x = 10 the result will be 22.5
Komentar (3)

Semua jawaban tidak menunjukkan program dan pendekatan umum. Saya sarankan matematika dengan pendekatan spesifik untuk kasus anda. Hal ini dapat lebih cepat khususnya untuk daftar panjang. Ia bekerja karena anda adalah daftar bilangan sampai ke n:

Let's asumsikan kita memiliki alam nomor1, 2, 3, ..., 10:

>>> nat_seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Anda dapat menggunakan uang fungsi pada daftar:

>>> print sum(nat_seq)
55

Anda juga dapat menggunakan rumus n*(n+1)/2 di mana n adalah nilai elemen terakhir dalam daftar (di sini: nat_seq[-1]), sehingga anda terhindar dari iterasi atas unsur-unsur:

>>> print (nat_seq[-1]*(nat_seq[-1]+1))/2
55

Untuk menghasilkan urutan(1+2)/2, (2+3)/2, ..., (9+10)/2 anda dapat menggunakan generator dan rumus (2*k-1)/2. (catatan dot untuk membuat nilai-nilai floating point). Anda harus melewatkan elemen pertama saat membuat daftar baru:

>>> new_seq = [(2*k-1)/2. for k in nat_seq[1:]]
>>> print new_seq
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]

Di sini juga, anda dapat menggunakan uang fungsi pada daftar itu:

>>> print sum(new_seq)
49.5

Tapi anda juga dapat menggunakan rumus (((n*2+1)/2)**2-1)/2, sehingga anda dapat menghindari iterasi atas unsur-unsur:

>>> print (((new_seq[-1]*2+1)/2)**2-1)/2
49.5
Komentar (0)

Cara paling sederhana untuk memecahkan masalah ini:

l =[1,2,3,4,5]
sum=0
for element in l:
    sum+=element
print sum
Komentar (0)

Mari kita membuatnya mudah untuk Pemula:-

  1. The global kata kunci akan memungkinkan variabel global pesan yang akan ditugaskan dalam fungsi utama tanpa menghasilkan variabel lokal baru

pesan = "Ini adalah global!"

def main(): pesan global pesan = "adalah" print(pesan)

main()

output "adalah" - Dari Fungsi panggilan

print(pesan)

output "adalah" - Dari Luar lingkup

Konsep ini disebut Membayangi

  1. Jumlah daftar bilangan di Python

nums = [1, 2, 3, 4, 5]

var = 0

def jumlah(): untuk num di nums: var global var = var + num print(var)

if name == 'utama': jumlah()

Output = 15

Komentar (0)

Singkat dan sederhana:

def ave(x,y):
  return (x + y) / 2.0

map(ave, a[:-1], a[1:])

Dan berikut's bagaimana tampilannya:

>>> a = range(10)
>>> map(ave, a[:-1], a[1:])
[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]

Karena beberapa kebodohan dalam cara Python menangani sebuah peta lebih dari dua daftar, anda harus memotong daftar, a[:-1]. Ia bekerja lebih sebagai anda'd harapkan jika anda menggunakan itertools.imap:

>>> import itertools
>>> itertools.imap(ave, a, a[1:])

>>> list(_)
[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]
Komentar (2)

Menggunakan berpasangan itertools resep:

import itertools
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = itertools.tee(iterable)
    next(b, None)
    return itertools.izip(a, b)

def pair_averages(seq):
    return ( (a+b)/2 for a, b in pairwise(seq) )
Komentar (0)

Generator adalah cara mudah untuk menulis ini:

from __future__ import division
# ^- so that 3/2 is 1.5 not 1

def averages( lst ):
    it = iter(lst) # Get a iterator over the list
    first = next(it)
    for item in it:
        yield (first+item)/2
        first = item

print list(averages(range(1,11)))
# [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]
Komentar (2)
import numpy as np    
x = [1,2,3,4,5]
[(np.mean((x[i],x[i+1]))) for i in range(len(x)-1)]
# [1.5, 2.5, 3.5, 4.5]
Komentar (0)

Saya menggunakan sementara loop untuk mendapatkan hasil:

i = 0
while i < len(a)-1:
   result = (a[i]+a[i+1])/2
   print result
   i +=1
Komentar (0)

Loop melalui unsur-unsur dalam daftar dan update total seperti ini:

def sum(a):
    total = 0
    index = 0
    while index < len(a):
        total = total + a[index]
        index = index + 1
    return total
Komentar (0)

Terima kasih untuk Karl Knechtel saya bisa memahami pertanyaan anda. Interpretasi saya:

  1. Anda ingin daftar baru dengan rata-rata dari elemen i dan i+1.
  2. Anda ingin menjumlahkan setiap elemen dalam daftar.

Pertama pertanyaan menggunakan fungsi anonim (aka. Fungsi Lambda): s = lambda l: [(l[0]+l[1])/2.] + s(l[1:]) jika len(l)>1 lagi [] #dengan asumsi anda ingin hasil seperti float s = lambda l: [(l[0]+l[1])//2] + s(l[1:]) jika len(l)>1 lagi [] #dengan asumsi anda ingin lantai hasil

Detik pertanyaan juga menggunakan fungsi anonim (aka. Fungsi Lambda): p = lambda l: l[0] + p(l[1:]) jika l!=[] lain 0

Kedua * pertanyaan-pertanyaan yang digabungkan dalam satu baris kode : s = lambda l: (l[0]+l[1])/2. + s(l[1:]) jika len(l)>1 else 0 #dengan asumsi anda ingin hasil seperti float s = lambda l: (l[0]+l[1])/2. + s(l[1:]) jika len(l)>1 else 0 #dengan asumsi anda ingin lantai hasil gunakan salah satu yang paling cocok dengan kebutuhan anda*

Komentar (0)

I'd hanya menggunakan lambda dengan peta()

a = [1,2,3,4,5,6,7,8,9,10]
b = map(lambda x, y: (x+y)/2.0, fib[:-1], fib[1:])
print b
Komentar (0)

Dalam semangat itertools. Inspirasi dari berpasangan resep.

from itertools import tee, izip

def average(iterable):
    "s -> (s0,s1)/2.0, (s1,s2)/2.0, ..."
    a, b = tee(iterable)
    next(b, None)
    return ((x+y)/2.0 for x, y in izip(a, b))

Contoh:

>>>list(average([1,2,3,4,5]))
[1.5, 2.5, 3.5, 4.5]
>>>list(average([1,20,31,45,56,0,0]))
[10.5, 25.5, 38.0, 50.5, 28.0, 0.0]
>>>list(average(average([1,2,3,4,5])))
[2.0, 3.0, 4.0]
Komentar (0)
n = int(input("Enter the length of array: "))
list1 = []
for i in range(n):
    list1.append(int(input("Enter numbers: ")))
print("User inputs are", list1)

list2 = []
for j in range(0, n-1):
    list2.append((list1[j]+list1[j+1])/2)
print("result = ", list2)
Komentar (0)

Cobalah menggunakan daftar pemahaman. Sesuatu seperti:

new_list = [(old_list[i] + old_list[i+1])/2 for i in range(len(old_list-1))]
Komentar (2)