Tôi có một trình tạo Python lexg
, tạo ra một danh sách trên mỗi lần lặp. Mã này có vẻ theo kiểu truyền thống for
hoạt động theo nghĩa vòng tròn, tức là
for i in lexg(2,2): print(i)
产生:
[2, 0]
[1, 1]
[1, 0]
[0, 2]
[0, 1]
[0, 0]
nhưng dường như phá vỡ sự hiểu biết về danh sách, nghĩa là cả hai
danh sách(lexg(2,2))
Và
[i cho tôi trong lexg(2,2)]
生产
[[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0]]
Tuy nhiên, tôi hy vọng danh sách(lexg(2,2))
产生
[[2, 0]
[1, 1]
[1, 0]
[0, 2]
[0, 1]
[0, 0]]
lexg
Mã là:
def lexg( n, d ):
số mũ = [0] * n;
vòng lặp def( m, TotalDegree ):
r = đảo ngược( phạm vi( 0, d - TotalDegree + 1 ) );
cho j trong r:
số mũ[nm] = j;
nếu m==1:
số mũ năng suất;
khác:
cho x trong looper( m-1, TotalDegree+j ): mang lại x
vòng lặp trả về(n, 0);
Điều gì gây ra đầu ra trống?
Chỉnh sửa/Giải pháp
Như bạn có thể thấy bên dưới, vấn đề là trình tạo trả về cùng một danh sách ở mỗi bước. Vì vậy, một giải pháp là sao chép danh sách trước khi quay lại. Ví dụ, tôi có lexg
của số mũ năng suất;
Thay đổi dòng thành danh sách năng suất (số mũ);
, nhờ đó giải quyết được vấn đề.
正如 lừa dối Như đã chỉ ra, bạn kết thúc với một danh sách các danh sách trỏ đến cùng một phiên bản
Để rõ ràng hơn, hãy thử
a = danh sách(lexg(2,2))
a[0][0] = 3
in (a)
结果
[[3, 0], [3, 0], [3, 0], [3, 0], [3, 0], [3, 0]]
Tôi là một lập trình viên xuất sắc, rất giỏi!