2012-04-06 34 views
6

Tôi mới sử dụng Python và tôi gặp khó khăn với danh sách. Tôi muốn trừ 1 từ tất cả các giá trị trong danh sách trừ giá trị 10.5. Đoạn mã dưới đây đưa ra một lỗi rằng chỉ mục gán danh sách x3 nằm ngoài phạm vi. Mã này cho đến nay:Phân tích giá trị Python trong một danh sách

x2=[10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5] 
x3=[] 
i=0 
while (i<22): 
if x2[i]==10.5: 
    x3[i]=x2[i] 
else: 
    x3[i]=x2[i]-1 
break 
#The result I want to achieve is: 
#x3=[10.5, -7.36, 10.56, 18.06, -5.37, 25.56, 8.38, -34.12, -9.44, -1.31, -14.44, -7.25, -14.44, -1.94, -1.94, 18.06, -1.31, -6.94, -14.75, -24.44, -52.68, 10.5] 
+4

+1 để trình bày ví dụ đầu vào, đầu ra mong muốn, và mã bạn đã thử. –

+1

Cách bạn đang cố gắng thêm các phần tử vào danh sách hoạt động cho từ điển; cho danh sách, bạn không thể chỉ định nó. Hoặc sử dụng phương thức 'list.append' hoặc sử dụng một trong các tùy chọn ưa thích mà các câu trả lời gợi ý với' map' và * list comprehension *. –

Trả lời

0
x2=[10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5] 
x3=[] 
for value in x2: 
    if value != 10.5: 
     value -= 1 
    x3.append(value) 
7

Hãy thử như sau:

x3 = [((x - 1) if x != 10.5 else x) for x in x2] 
0

bản đồ chức năng built-in Python là khá nhiều chính xác cho các tình huống mà bạn có trong tay, sử dụng đó và một chức năng ẩn danh giải quyết vấn đề trở thành một lớp lót:

map(lambda x: x if x == 10.5 else x - 1, x2) 

Hoặc nếu bạn không thấy thoải mái khi sử dụng các hàm lambda, bạn có thể xóa ine chức năng riêng biệt:

def func(x): 
    if x == 10.5: 
     return x 
    else: 
     return x - 1 

map (func, x2) 
3
x2 = [10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5] 
x3 = map(lambda x: x if x == 10.5 else x - 1, x2) 

Python là thanh lịch.

0

Bản đồ là lựa chọn tốt nhất, nhưng nếu bạn muốn trở thành sử dụng khác nhau giảm: D

>>> x2 = [10.5, -6.36, 11.56, 19.06, -4.37, 26.56, 9.38, -33.12, -8.44, 0.31, -13.44, - 6.25, -13.44, -0.94, -0.94, 19.06, 0.31, -5.94, -13.75, -23.44, -51.68, 10.5] 
>>> reduce(lambda x,y: x+[y if y==10.5 else y-1], x2, []) 
[10.5, -7.36, 10.56, 18.06, -5.37, 25.56, 8.38, -34.12, -9.44, -0.69, -14.44, -7.25, -14.44, -1.94, -1.94, 18.06, -0.69, -6.94, -14.75, -24.44, -52.68, 10.5] 
Các vấn đề liên quan