Kurangi nilai dari setiap angka dalam daftar dengan Python?

Saya punya daftarnya

 a = [49, 51, 53, 56]

Bagaimana cara mengurangi 13 dari setiap nilai bilangan bulat dalam daftar?


person jaycodez    schedule 07.02.2011    source sumber


Jawaban (5)


Dengan pemahaman daftar:

a = [x - 13 for x in a]
person Ignacio Vazquez-Abrams    schedule 07.02.2011
comment
Terima kasih, Kerja bagus. :) Bagaimana Anda memasukkannya ke dalam suatu fungsi dengan cepat? - person jaycodez; 07.02.2011
comment
Dengan meletakkan def minus13(a): pada baris diatasnya dan membuat indentasi satu tingkat. - person Ignacio Vazquez-Abrams; 07.02.2011
comment
Mengapa a[:] di lhs alih-alih hanya menugaskan kembali ke a? Bukankah a[:] membuat salinan daftar? - person istruble; 07.02.2011
comment
istruble: stackoverflow.com/questions/4081561/ - person Ignacio Vazquez-Abrams; 07.02.2011
comment
Apa yang harus dilakukan adalah nilai dari pemahaman daftar harus dikembalikan oleh fungsi, dan pemanggil harus memutuskan untuk mengganti urutan yang ada jika sesuai. - person Ignacio Vazquez-Abrams; 07.02.2011
comment
IVA: Terima kasih. Itulah yang saya duga tetapi saya tidak menemukan banyak hal di docs.python.org dengan pencarian awal saya. Sepertinya mungkin untuk melakukan optimasi awal;) Josh: Saya menulis jawaban yang sama tetapi hanya dengan a di lhs. - person istruble; 07.02.2011
comment
minus13() adalah fungsi yang Anda tetapkan dalam kode Anda, yang mengembalikan hasil pemahaman daftar. Sisanya adalah pembuatan daftar dan pemanggilan fungsi yang terjadi di tempat lain dalam kode Anda. - person Ignacio Vazquez-Abrams; 07.02.2011
comment
@istruble: Menugaskan langsung ke surat wasiat juga akan berhasil. Jadi a = [x - 13 for x in a] akan berfungsi dengan baik, dan tidak terlalu membingungkan. - person Lennart Regebro; 07.02.2011
comment
@Lennart: Kecuali ada referensi lain ke daftar, dan Anda ingin referensi tersebut berisi nilai yang dimodifikasi. - person Ignacio Vazquez-Abrams; 07.02.2011
comment
@Ignacio: Benar, tapi itu tidak ada dalam pertanyaan, dan menurut pengalaman saya, ini bukan kasus penggunaan yang umum. Mungkin itu tergantung gaya Anda, tapi saya tidak pernah melakukannya. - person Lennart Regebro; 07.02.2011

Jika Anda sering bekerja dengan angka, Anda mungkin ingin melihat NumPy. Ini memungkinkan Anda melakukan semua jenis operasi secara langsung pada array numerik. Misalnya:

>>> import numpy
>>> array = numpy.array([49, 51, 53, 56])
>>> array - 13
array([36, 38, 40, 43])
person shang    schedule 07.02.2011
comment
Saya melakukan tes cepat dan mengembalikan array baru tanpa menyentuh array asli. - person Francois; 09.06.2018

Anda dapat menggunakan fungsi map():

a = list(map(lambda x: x - 13, a))
person sputnikus    schedule 07.02.2011
comment
@Frost.baka Dalam Python 3, peta mengembalikan objek peta. Di Python 2, ia mengembalikan daftar. - person sputnikus; 07.02.2011

Untuk memperjelas solusi yang sudah diposting karena pertanyaan di komentar

import numpy

array = numpy.array([49, 51, 53, 56])
array = array - 13

akan menghasilkan:

susunan([36, 38, 40, 43])

person JJ K.    schedule 08.11.2019

Ini akan berhasil:

for i in range(len(a)):
  a[i] -= 13
person Oscar Mederos    schedule 07.02.2011
comment
Solusi pemahaman daftar jauh lebih Pythonic. Anda mungkin menyukainya. docs.python.org/tutorial/ - person istruble; 07.02.2011
comment
Siapa yang menghapus komentar saya? - Saya tidak mengerti gunanya menghitung panjang a. Untuk membuat perhitungan sederhana. - person jaycodez; 07.02.2011
comment
Penghitungan diperlukan, jika algoritme ingin diekspresikan dengan cara ini, agar variabel indeks (i) dapat melakukan iterasi melalui semua nilai indeks yang mungkin. Variabel indeks ini diperlukan untuk mengubah setiap elemen dalam daftar. - person Santa; 07.02.2011
comment
Menggunakan range dan len bersama-sama dalam python hampir selalu merupakan bau kode, selalu ada cara yang lebih baik untuk melakukan sesuatu seperti pada banyak contoh yang diberikan di atas. - person Mark Lawrence; 20.02.2021