2012-02-13 53 views
5

Danh sách đệ quy được biểu diễn bằng một chuỗi các cặp. Phần tử đầu tiên của mỗi cặp là một phần tử trong danh sách, trong khi phần tử thứ hai là một cặp đại diện cho phần còn lại của danh sách. Phần tử thứ hai của cặp cuối cùng là None, cho biết danh sách đã kết thúc. Chúng ta có thể xây dựng cấu trúc này bằng cách sử dụng một tuple lồng nhau. Ví dụ:Danh sách chuyển đổi danh sách và đệ quy

(1, (2, (3, (4, Không))))

Cho đến nay, tôi đã tạo ra một phương pháp mà người cải đạo một bộ giá trị hoặc giá trị Không có trong danh sách tương ứng. Phương thức này được gọi là to_rlist (các mục). Ví dụ:

>>> to_rlist((1, (0, 2),(), 3)) 
(1, ((0, (2, None)), (None, (3, None)))) 

Làm cách nào để viết nghịch đảo của hàm to_rlist, một hàm lấy danh sách đầu vào và trả về bộ tương ứng? Phương thức này nên được gọi là to_tuple (tham số). Ví dụ về những gì sẽ xảy ra:

>>> x = to_rlist((1, (0, 2),(), 3)) 
>>> to_tuple(x) 
(1, (0, 2),(), 3) 

Lưu ý: Phương thức to_rlist hoạt động như dự định.

Đây là những gì tôi có cho đến nay:

def to_tuple(L): 
    if not could_be_rlist(L):   
     return (L,) 
    x, y = L 
    if not x is None and not type(x) is tuple and y is None:   
     return (x,)  
    elif x is None and not y is None:   
     return ((),) + to_tuple(y) 
    elif not x is None and not y is None:   
     return to_tuple(x) + to_tuple(y) 

nào mang lại cho tôi những kết quả sau (đó là không chính xác):

>>> x = to_rlist((1, (0, 2),(), 3)) 
>>> to_tuple(x) 
(1, 0, 2,(), 3) 

Làm thế nào tôi có thể sửa chữa phương pháp của tôi để trả về một tuple lồng nhau đúng cách ?

+1

Một danh sách đệ quy là một trong đó có chứa một tham chiếu đến chính nó. – wim

+2

@wim Nó cũng có thể có nghĩa là "một loại danh sách được định nghĩa theo chính nó", trong trường hợp này nó sẽ phù hợp. (Đó cũng có thể là thuật ngữ mà nhiệm vụ sử dụng, một lý do khác tại sao nó có thể ở lại.) – millimoose

+5

@ user1140118: Stack Overflow không phải là trang "làm (phần của) bài tập về nhà của tôi cho tôi". Bạn nên tự mình bắt đầu một chức năng và đăng câu hỏi về các sự cố * cụ thể * mà bạn đang gặp phải. – millimoose

Trả lời

4
def to_list(x): 
    if x == None: 
     return() 
    if type(x) != tuple: 
     return x 
    a, b = x 
    return (to_list(a),) + to_list(b) 
+3

1. sử dụng 'x là None' để so sánh với singleton 2. sử dụng' isinstance' để kiểm tra kiểu, để mã vẫn hoạt động với các lớp kế thừa 3. ​​khi bạn thấy thẻ 'homework', không chỉ đăng một giải pháp . giúp học sinh làm việc ra những gì khu vực cần cải thiện trong công việc của mình. – wim

+0

Tôi đã thử các giải pháp nhưng chỉ có thể nối tuple (không phải là "str") để tuple những gì là sai? – Dejell

-1

một này làm việc cho HW của tôi;)

def to_rlist(items): 
    r = empty_rlist 
    for i in items[::-1]: 
     if is_tuple(i): r1 = to_rlist(i) 
     else: r1 = i 
     r = make_rlist(r1,r) 
    return r 
+5

Empty_rlist là gì và make_rlist là gì? – Dejell

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