Trừ một giá trị khỏi mọi số trong danh sách bằng Python?


84

Tôi có một danh sách

 a = [49, 51, 53, 56]

Làm cách nào để trừ 13 cho mỗi giá trị số nguyên trong danh sách?

Câu trả lời:


146

Với một danh sách dễ hiểu :

a = [x - 13 for x in a]

2
Bằng cách đặt def minus13(a):dòng trên và thụt lề một cấp.
Ignacio Vazquez-Abrams

8
Tại sao a[:]trên lhs thay vì chỉ gán lại cho a? Không a[:]tạo một bản sao của danh sách?
istruble


4
Điều nên làm là giá trị từ việc hiểu danh sách phải được trả về bởi hàm và người gọi nên quyết định thay thế chuỗi hiện có nếu thích hợp.
Ignacio Vazquez-Abrams

1
@istruble: Chỉ cần gán trực tiếp cho một ý chí cũng được. Vì vậy, a = [x - 13 for x in a]sẽ hoạt động tốt và ít gây nhầm lẫn hơn.
Lennart Regebro

71

Nếu bạn đang làm việc với các con số nhiều, bạn có thể muốn xem qua NumPy . Nó cho phép bạn thực hiện tất cả các loại hoạt động trực tiếp trên các mảng số. Ví dụ:

>>> import numpy
>>> array = numpy.array([49, 51, 53, 56])
>>> array - 13
array([36, 38, 40, 43])

1
Tôi đã thực hiện một bài kiểm tra nhanh và nó trả về một mảng mới, giữ nguyên mảng ban đầu.
Francois

10

Bạn có thể sử dụng hàm map () :

a = list(map(lambda x: x - 13, a))

7
@ Frost.baka Trong Python 3, bản đồ trả về đối tượng bản đồ. Trong Python 2, nó trả về danh sách.
sputnikus

5

Để làm rõ một giải pháp đã được đăng do các câu hỏi trong nhận xét

import numpy

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

sẽ xuất:

mảng ([36, 38, 40, 43])


3

Điều này sẽ hoạt động:

for i in range(len(a)):
  a[i] -= 13

4
Giải pháp hiểu danh sách là khó hơn nhiều. Bạn có thể thích chúng. docs.python.org/tutorial/...
istruble

Ai đã xóa bình luận của tôi? - Tôi không thấy ích lợi khi đếm độ dài của a. Để thực hiện một phép tính đơn giản.
jaycodez

2
Việc đếm là cần thiết, nếu thuật toán được biểu diễn theo cách này, để biến chỉ số ( i) lặp qua tất cả các giá trị chỉ mục có thể. Biến chỉ mục này là cần thiết để thay đổi từng phần tử trong danh sách.
Ông già Noel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.