Cách Pythonic nhất lặp đi lặp lại xây dựng một danh sách?


0 Phiếu
Đã hỏi 25/5/2016 bởi ivrinface (190 điểm)
Tôi đã cố gắng để làm một cái gì đó trong Python có sử dụng các thủ tục nói chung sau đây, và tôi muốn biết những gì là cách tốt nhất để approch đây là. Đầu tiên, một bước khởi tạo:
  • tạo một mục M.
  • tạo một danh sách L và thêm M để L.
loop thứ hai, thông qua những điều sau đây:
  • tạo một mục mới bằng cách sửa đổi mục cuối cùng thêm vào L.
  • thêm mục mới cho L.
như là một ví dụ đơn giản, nói rằng tôi muốn tạo ra một danh sách mà thứ n danh sách chứa các con số từ 1 đến n. Tôi có thể sử dụng các thủ tục sau đây (ngớ ngẩn).
  • lúc đầu M là [1] và L = [[1]].
  • tiếp theo, sửa đổi [1] bằng cách thêm 2 để nó để tạo khoản mục mới [1,2], sau đó thêm [1,2] l rất L = [[1], [1,2]].
  • tiếp theo, sửa đổi [1,2] bằng cách thêm 3 để nó để tạo khoản mục mới [1,2,3], sau đó thêm [1,2,3] l rất L = [[1], [1,2], [1,2,3]].
  • tiếp theo, sửa đổi [1,2,3] bằng cách thêm 4 để nó để tạo khoản mục mới [1,2,3,4], sau đó thêm [1,2,3,4] l rất L = [[1], [1,2], [1,2,3], [1,2,3,4]]. vv
tôi đã thử một vài điều, nhưng hầu hết trong số họ sẽ thay đổi không chỉ là người cuối cùng mục Thêm nhưng cũng ghi bổ sung vào L ở bước trước đó. Cho vấn đề cụ thể tôi đã quan tâm, tôi đã quản lý để tìm một giải pháp ứng xử đúng cách (ít cho trường hợp nhỏ), nhưng nó có vẻ không thanh Nha, tôi không chắc chắn tại sao nó hoạt động khi những thứ khác không, và tôi không ngay cả tự tin rằng nó vẫn sẽ hành xử như mong muốn cho lớn các trường hợp. Tôi cũng không tin rằng tôi có thể thích ứng với phương pháp tiếp cận của tôi để vấn đề tương tự. Nó không phải là một case của tôi không hiểu biết về các vấn đề, kể từ khi tôi đã mã hoá điều tương tự trong các ngôn ngữ khác của programming mà không có vấn đề. Vì vậy, tôi tự hỏi làm thế nào nhiều có kinh nghiệm lập trình Python có thể giải quyết nhiệm vụ tổng quát này. (Tôi đang bỏ qua code của riêng tôi một phần vì tôi mới ở đây và tôi đã không đã tìm ra làm thế nào để nhập nó vào stackoverflow, nhưng cũng vì nó long-ish và tôi không muốn giúp đỡ với vấn đề cụ thể, nhưng thay vì làm thế nào để xử lý chung chung hơn procedure tôi đã mô tả ở trên.)

1 câu trả lời

0 Phiếu
Đã trả lời 01/6/2016 bởi Gur9717It (380 điểm)
Khi thêm một danh sách object M danh sách khác, bạn đang chỉ thêm một tài liệu tham khảo ; tiếp tục thao tác có nghĩa là M danh sách, bạn sẽ thấy những thay đổi đó được phản ánh qua reference(s) khác quá:
>>> M = []
>>> resultlist = []
>>> resultlist.append(M)
>>> M is resultlist[0]
True
>>> M.append(1)
>>> resultlist[0]
[1]
>>> M
[1]
lưu ý rằng M is resultlist[0] là đúng sự thật; đó là cùng object . Bạn muốn thêm một bản sao của M để thay thế:
resultlist.append(M[:])
những lát toàn bộ ở đây ([:] có nghĩa là để lát từ đầu đến cuối) tạo ra một danh sách mới với một bản sao nông cạn của nội dung của M. Cách chung để xây dựng sản xuất một loạt các L từ một M liên tục thay đổi điểm khởi đầu là sử dụng một generator function . Của bạn đơn giản thêm các số tiếp theo cho M series có thể được thực hiện như:
def growing_sequence():
    M = []
    counter = 0
    while True:
        M.append(counter)
        counter += 1
        yield M[:]
, điều này sẽ mang lại bao giờ còn liệt kê mỗi lần bạn đã lặp, ngày theo yêu cầu:
>>> gen = growing_sequence()
>>> next(gen)
[0]
>>> next(gen)
[0, 1]
>>> for i, lst in enumerate(gen):
...     print i, lst
...     if i == 2: break
...
0 [0, 1, 2]
1 [0, 1, 2, 3]
2 [0, 1, 2, 3, 4]
Đã bình luận 03/6/2016 bởi Lbh_Pyo (440 điểm)
Nó sẽ là tốt hơn nếu bạn đăng code. Ngoài ra, viết một ví dụ cụ thể hiển thị các mẫu input và dự kiến sản lượng

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...