Lebih
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.
342
23
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 bukan2
.Dengan demikian:
Pertanyaan 2:
Bahwa penggunaan
uang
harus bekerja dengan baik. Pekerjaan-pekerjaan sebagai berikut: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.
Jumlah daftar nomor:
Menghitung setengah dari n dan n - 1 (jika saya memiliki pola yang benar), menggunakan daftar pemahaman:
Jumlah unsur-unsur yang berdekatan, misalnya ((1 + 2) / 2) + ((2 + 3) / 2) + ... menggunakan kurangi dan lambdas
Pertanyaan 2: Untuk jumlah daftar bilangan bulat:
Jika daftar berisi bilangan bulat sebagai string:
Anda dapat mencoba cara ini:
Tampaknya bahwa
uang
yang telah ditetapkan dalam kode di suatu tempat dan menimpa fungsi default. Jadi saya dihapus dan masalah ini diselesaikan.Menggunakan sederhana
daftar-pemahaman
danjumlah
: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 nomor
1, 2, 3, ..., 10
:Anda dapat menggunakan
uang
fungsi pada daftar:Anda juga dapat menggunakan rumus
n*(n+1)/2
di manan
adalah nilai elemen terakhir dalam daftar (di sini:nat_seq[-1]
), sehingga anda terhindar dari iterasi atas unsur-unsur: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:Di sini juga, anda dapat menggunakan
uang
fungsi pada daftar itu:Tapi anda juga dapat menggunakan rumus
(((n*2+1)/2)**2-1)/2
, sehingga anda dapat menghindari iterasi atas unsur-unsur:Cara paling sederhana untuk memecahkan masalah ini:
Mari kita membuatnya mudah untuk Pemula:-
global
kata kunci akan memungkinkan variabel global pesan yang akan ditugaskan dalam fungsi utama tanpa menghasilkan variabel lokal baruKonsep ini disebut Membayangi
Output = 15
Singkat dan sederhana:
Dan berikut's bagaimana tampilannya:
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 menggunakanitertools.imap
:Menggunakan
berpasangan
itertools resep:Generator adalah cara mudah untuk menulis ini:
Saya menggunakan
sementara
loop untuk mendapatkan hasil:Loop melalui unsur-unsur dalam daftar dan update total seperti ini:
Terima kasih untuk Karl Knechtel saya bisa memahami pertanyaan anda. Interpretasi saya:
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*I'd hanya menggunakan lambda dengan peta()
Dalam semangat itertools. Inspirasi dari berpasangan resep.
Contoh:
Cobalah menggunakan daftar pemahaman. Sesuatu seperti: