Bagaimana cara menambahkan integer ke setiap elemen dalam daftar?

135

Jika saya punya list=[1,2,3]dan saya ingin menambahkan 1ke setiap elemen untuk mendapatkan output [2,3,4], bagaimana saya melakukannya?

Saya berasumsi saya akan menggunakan for for loop tetapi tidak yakin bagaimana caranya.

Dennis
sumber

Jawaban:

157
new_list = [x+1 for x in my_list]
Ned Batchelder
sumber
6
Pembicaraan ini menjelaskannya: Fakta dan Mitos tentang Nama dan Nilai Python: nedbatchelder.com/text/names1.html
Ned Batchelder
√ Info luar biasa. Membuka mata.
Daniel Springer
3
@DaniSpringer Karena Anda tidak menetapkan ke daftar. Ini sama dengan melakukan lst = [1, 2, 3]; e = lst[0]; e += 1. etidak memiliki informasi tentang dari mana asalnya, itu hanya variabel tempat elemen daftar telah ditetapkan. Setelah menetapkan sesuatu yang lain untuk itu, daftar lsttidak akan berubah.
Błażej Michalik
Yah jawaban ini terlihat sangat mirip dengan saya.
Daniel Springer
dan koresponden malas menghitung satu:new_list = (x+1 for x in my_list)
Eduardo Pignatelli
26
>>> mylist = [1,2,3]
>>> [x+1 for x in mylist]
[2, 3, 4]
>>>

python daftar-pemahaman .

RanRag
sumber
24

Jawaban lain pada pemahaman daftar mungkin yang terbaik untuk penambahan sederhana, tetapi jika Anda memiliki fungsi yang lebih kompleks yang Anda butuhkan untuk diterapkan ke semua elemen maka peta mungkin cocok.

Dalam contoh Anda itu akan menjadi:

>>> map(lambda x:x+1, [1,2,3])
[2,3,4]
Andrew Cox
sumber
7
map(1 .__add__, ...)bekerja juga. Perhatikan bahwa Anda memerlukan ruang di antara 1dan .untuk mencegah pengurai berpikir itu adalah pelampung
John La Rooy
15

jika Anda ingin menggunakan numpy ada metode lain sebagai berikut

import numpy as np
list1 = [1,2,3]
list1 = list(np.asarray(list1) + 1)
sushmit
sumber
13

Sunting: ini bukan di tempat

Pertama, jangan gunakan kata 'daftar' untuk variabel Anda. Membayangi kata kunci list.

Cara terbaik adalah melakukannya di tempat menggunakan splicing, perhatikan yang [:]menunjukkan sambatan:

>>> _list=[1,2,3]
>>> _list[:]=[i+1 for i in _list]
>>> _list
[2, 3, 4]
raja robert
sumber
4
Ini bagus untuk mengubah daftar yang ada, tetapi masih menghasilkan yang baru. Apakah entah bagaimana tidak aman menggunakan generator untuk menghindari pembuatan daftar yang tidak dibutuhkan? Yaitu _list[:]=(i+1 for i in _list),.
Alan
yang masih membuat daftar baru, tidak mungkin untuk melakukannya di tempat tanpa untuk loop saya tidak berpikir
robert king
Menurut Anda mengapa _list[:]=(i+1 for i in _list)membuat daftar baru?
Alan
Maksud saya, ini sudah ada, tetapi sementara itu akan membuat daftar baru untuk rhs. Lihat jawaban ini: stackoverflow.com/questions/4948293/… stackoverflow.com/questions/11877212/…
robert king
Saya mengerti apa yang kamu maksud. Memanggil urutan sementara daftar membingungkan saya. Apakah kita benar-benar tahu sesuatu tentang tipenya? Bukankah itu spesifik implementasi?
Alan
9
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]

Maksud saya di sini adalah untuk mengekspos jika item dalam daftar adalah bilangan bulat yang mendukung berbagai fungsi bawaan.

Kracekumar
sumber
7

Python 2+:

>>> mylist = [1,2,3]
>>> map(lambda x: x + 1, mylist)
[2, 3, 4]

Python 3+:

>>> mylist = [1,2,3]
>>> list(map(lambda x: x + 1, mylist))
[2, 3, 4]
satomacoto
sumber
3
import numpy as np

np.add([1, 2, 3], 1).tolist()

pemberian yang mana

[2, 3, 4]
tandai jay
sumber
2

Datang di cara yang tidak begitu efisien, tetapi unik untuk melakukannya. Jadi bagikan di seluruh. Dan ya itu membutuhkan ruang ekstra untuk daftar lain.

from operator import add
test_list1 = [4, 5, 6, 2, 10]
test_list2 = [1] * len(test_list1)

res_list = list(map(add, test_list1, test_list2))

print(test_list1)
print(test_list2)
print(res_list)

#### Output ####
[4, 5, 6, 2, 10]
[1, 1, 1, 1, 1]
[5, 6, 7, 3, 11]
Preetham
sumber
dari mana "tambah" itu berasal?
hahnec
tambahkan harus diimpor dari operator,from operator import add
Rajith Thennakoon
0
list = [1,2,3,4,5]

for index in range(5):
      list[index] = list[index] +1

print(list)
Munchjax
sumber
0

Banyak jawaban di atas sangat bagus. Saya juga melihat beberapa jawaban aneh yang akan melakukan pekerjaan itu. Juga, jawaban terakhir yang terlihat adalah melalui loop normal. Kesediaan untuk memberikan jawaban ini menuntun saya ke itertoolsdan numpy, yang akan melakukan pekerjaan yang sama dengan cara yang berbeda.

Di sini saya menyajikan berbagai cara untuk melakukan pekerjaan itu, tidak dijawab di atas.

import operator
import itertools

x = [3, 5, 6, 7]

integer = 89

"""
Want more vairaint can also use zip_longest from itertools instead just zip
"""
#lazy eval
a = itertools.starmap(operator.add, zip(x, [89] * len(x))) # this is not subscriptable but iterable
print(a)
for i in a:
  print(i, end = ",")


# prepared list
a = list(itertools.starmap(operator.add, zip(x, [89] * len(x)))) # this returns list
print(a)



# With numpy (before this, install numpy if not present with `pip install numpy`)
import numpy

res = numpy.ones(len(x), dtype=int) * integer + x # it returns numpy array
res = numpy.array(x) + integer # you can also use this, infact there are many ways to play around
print(res)
print(res.shape) # prints structure of array, i.e. shape

# if you specifically want a list, then use tolist

res_list = res.tolist()
print(res_list)

Keluaran

>>> <itertools.starmap object at 0x0000028793490AF0> # output by lazy val
>>> 92,94,95,96,                                     # output of iterating above starmap object
>>> [92, 94, 95, 96]                                 # output obtained by casting to list
>>>                   __
>>> # |\ | |  | |\/| |__| \ /
>>> # | \| |__| |  | |     |
>>> [92 94 95 96]                                    # this is numpy.ndarray object
>>> (4,)                                             # shape of array
>>> [92, 94, 95, 96]                                 # this is a list object (doesn't have a shape)

Satu-satunya alasan saya untuk menyoroti penggunaan numpyadalah bahwa kita harus selalu melakukan manipulasi seperti itu dengan perpustakaan seperti numpy karena ini efisien untuk array yang sangat besar.

Rushikesh
sumber