2011-02-07 23 views
38

Tôi vẫn đang đọc hướng dẫn Python 3.1.3 và gặp sự cố sau:Trừ một giá trị khỏi mọi số trong một danh sách bằng Python?

Làm cách nào để bạn xóa giá trị khỏi nhóm số?

# A list with a group of values 
a = [49, 51, 53, 56] 

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

# Attempting to minus 13 from this list - FAIL! 
(a[:] = a[:] - 13) 

Trả lời

70

Với danh sách hiểu.

a[:] = [x - 13 for x in a] 
+0

Cảm ơn, Làm tốt lắm. :) Làm cách nào để nhanh chóng đưa vào chức năng? – Josh

+1

Bằng cách đặt 'def minus13 (a):' trên dòng ở trên và thụt lề một cấp. –

+4

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

2

này sẽ làm việc:

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

Giải pháp đọc danh sách là nhiều hơn nữa pythonic. Bạn có thể thích chúng. http://docs.python.org/tutorial/datastructures.html#list-comprehensions – istruble

+0

cảm ơn bạn @istruble;) –

+0

Ai đã xóa nhận xét của tôi? - Tôi không thấy điểm đếm chiều dài của a. Để thực hiện một phép tính đơn giản. – Josh

31

Nếu được bạn làm việc với những con số rất nhiều, bạn có thể muốn có một cái nhìn tại 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 mảng số. Ví dụ:

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

Cảm ơn, tôi sẽ ghi nhớ điều này. Tôi sẽ cố gắng để có được đầu của tôi xung quanh Python đầu tiên sau đó tôi sẽ xem xét điều này trong tương lai. Tôi sẽ thực hiện rất nhiều thao tác XML tại thời điểm này, thật không may :). Nhưng tôi muốn trở nên hiệu quả hơn trong lập trình. Điều này sẽ giúp chỉnh sửa XML. – Josh

8

Bạn có thể sử dụng chức năng map():

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

Tại sao tạo danh sách bản đồ nếu bản đồ trả về một danh sách? –

+2

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

+0

kỳ lạ ... nhưng do đó tên "bản đồ" :) –

Các vấn đề liên quan