2012-12-15 53 views
18

Tôi đang học python từ lớp mã Google. Tôi đang thử các bài tập.ValueError: cần nhiều hơn 0 giá trị để giải nén (danh sách python)

def front_x(words): 
    x_list, ord_list = [] 
    for word in words: 
    if word[0] == 'x': 
     x_list.append(word) 
    else: 
     ord_list.append(word) 
    return sorted(x_list) + sorted(ord_list)  

Tôi tin rằng lỗi này được ném vì khởi tạo hai danh sách trống trên một dòng. Nếu nếu khởi tạo chúng trên các dòng riêng biệt, sẽ không có lỗi nào xảy ra nữa. Đây có phải là lý do không?

+12

Downvoters xin vui lòng để lại nhận xét – kunaguvarun

Trả lời

31

Bạn đang cố gắng sử dụng phân tuple:

x_list, ord_list = [] 

bạn có thể có nghĩa là để sử dụng nhiều công việc:

x_list = ord_list = [] 

mà sẽ không làm những gì bạn mong đợi nó; sử dụng sau đây thay vì:

x_list, ord_list = [], [] 

hay, tốt nhất vẫn:

x_list = [] 
ord_list = [] 

Khi sử dụng một danh sách bằng dấu phẩy của tên biến, Python hy vọng có được một chuỗi các biểu thức ở phía bên tay phải khớp với các biến số; những điều sau đây cũng sẽ hợp pháp:

two_lists = ([], []) 
x_list, ord_list = two_lists 

Điều này được gọi là giải nén tuple. Nếu, mặt khác, bạn cố gắng sử dụng nhiều phân với một danh sách trống đen (x_list = ord_list = []) sau đó cả hai x_listord_list sẽ được trỏ đến danh sách cùng và bất kỳ thay đổi thực hiện thông qua một biến sẽ được hiển thị trên khác biến:

>>> x_list = ord_list = [] 
>>> x_list.append(1) 
>>> x_list 
[1] 
>>> ord_list 
[1] 

Better giữ cho mọi thứ tinh thể rõ ràng và sử dụng hai bài tập riêng biệt, tạo cho mỗi biến danh sách trống của riêng mình.

+0

+1 @Martijn Pieters điều này đã giúp. Bạn có thể giải thích lý do tại sao bạn xếp hạng các cách tiếp cận khác nhau theo cách bạn đã làm. Đang cố gắng tìm hiểu một số thực hành tốt nhất về điều này. – vanilla

+0

@musked: không chắc chắn ý bạn là gì. Tốt nhất là tôi có hai cách tiếp cận được đặt tên, một cách sử dụng phân bổ tuple và một cách sử dụng hai bài tập riêng biệt. Tôi muốn sử dụng sau này vì nó rõ ràng hơn, vấn đề dễ đọc. –

+0

yeah đó là chính xác những gì tôi có nghĩa là để bạn xếp hạng theo khả năng đọc, tôi nghĩ rằng có thể có một cái gì đó tôi bỏ lỡ. – vanilla

4

Thay đổi dòng

x_list, ord_list = [] 

to 

x_list, ord_list = [], [] 
+0

Đây sẽ là đơn giản nhất tương đương với những gì tôi muốn làm. Cảm ơn. – kunaguvarun

0
loại

trả về của hàm không phù hợp với các giá trị dự kiến ​​trong chức năng ...

kiểm tra số lượng các biến trở về từ chức năng và biến bạn đang mong đợi

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