Câu trả lời:
new_list = [x+1 for x in my_list]
lst = [1, 2, 3]; e = lst[0]; e += 1
. e
không có bất kỳ thông tin nào về nguồn gốc của nó, nó chỉ là một biến mà một yếu tố của danh sách đã được gán. Sau khi gán một cái gì đó khác cho nó, danh sách lst
sẽ không thay đổi.
new_list = (x+1 for x in my_list)
>>> mylist = [1,2,3]
>>> [x+1 for x in mylist]
[2, 3, 4]
>>>
Các câu trả lời khác về hiểu danh sách có lẽ là đặt cược tốt nhất cho phép cộng đơn giản, nhưng nếu bạn có một hàm phức tạp hơn mà bạn cần áp dụng cho tất cả các yếu tố thì bản đồ có thể phù hợp.
Trong ví dụ của bạn, nó sẽ là:
>>> map(lambda x:x+1, [1,2,3])
[2,3,4]
map(1 .__add__, ...)
làm việc quá Lưu ý rằng bạn cần một khoảng trắng giữa 1
và .
để ngăn trình phân tích cú pháp nghĩ rằng đó là một số float
Chỉnh sửa: đây không phải là tại chỗ
Trước hết, đừng sử dụng từ 'danh sách' cho biến của bạn. Nó làm mờ từ khóa list
.
Cách tốt nhất là thực hiện tại chỗ bằng cách sử dụng nối, lưu ý [:]
biểu thị một mối nối:
>>> _list=[1,2,3]
>>> _list[:]=[i+1 for i in _list]
>>> _list
[2, 3, 4]
_list[:]=(i+1 for i in _list)
.
_list[:]=(i+1 for i in _list)
tạo ra một danh sách mới?
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]
Ý định của tôi ở đây là để lộ nếu mục trong danh sách là một số nguyên mà nó hỗ trợ các hàm dựng sẵn khác nhau.
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]
import numpy as np
np.add([1, 2, 3], 1).tolist()
cái nào cho
[2, 3, 4]
Đi qua một cách không hiệu quả, nhưng độc đáo để làm điều đó. Vì vậy, chia sẻ nó trên khắp. Và có, nó đòi hỏi thêm không gian cho một danh sách khác.
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]
from operator import add
Nhiều câu trả lời ở trên là rất tốt. Tôi cũng đã thấy một số câu trả lời kỳ lạ sẽ thực hiện công việc. Ngoài ra, câu trả lời cuối cùng được nhìn thấy là thông qua một vòng lặp bình thường. Sự sẵn sàng đưa ra câu trả lời này dẫn tôi đến itertools
và numpy
, sẽ làm cùng một công việc theo một cách khác.
Ở đây tôi trình bày các cách khác nhau để thực hiện công việc, không được trả lời ở trên.
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)
Đầu ra
>>> <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)
Lý do duy nhất của tôi để làm nổi bật việc sử dụng numpy
là người ta phải luôn luôn thực hiện các thao tác như vậy với các thư viện như numpy vì nó có hiệu suất hiệu quả cho các mảng rất lớn.