Giả sử tôi có một danh sách Python biểu thị các phạm vi cho một số biến:
conditions = [['i', (1, 5)], ['j', (1, 2)]]
Điều này thể hiện rằng iphạm vi biến từ 1 đến 5 và bên trong biến vòng lặp đó jnằm trong khoảng từ 1 đến 2. Tôi muốn có một từ điển cho mỗi kết hợp có thể:
{'i': 1, 'j': 1}
{'i': 1, 'j': 2}
{'i': 2, 'j': 1}
{'i': 2, 'j': 2}
{'i': 3, 'j': 1}
{'i': 3, 'j': 2}
{'i': 4, 'j': 1}
{'i': 4, 'j': 2}
{'i': 5, 'j': 1}
{'i': 5, 'j': 2}
Lý do là tôi muốn lặp đi lặp lại chúng. Nhưng vì toàn bộ không gian quá lớn, tôi không muốn tạo ra tất cả chúng, lưu trữ chúng và sau đó lặp lại danh sách từ điển đó. Tôi đã nghĩ về việc sử dụng thủ tục đệ quy sau đây, nhưng tôi cần một số trợ giúp với yieldphần này. Nó nên ở đâu? Làm thế nào để tôi tránh máy phát điện lồng nhau?
def iteration(conditions, currentCondition, valuedIndices):
if currentCondition == len(conditions):
yield valuedIndices
else:
cond = conditions[currentCondition]
index = cond[0]
lim1 = cond[1][0]
lim2 = cond[1][1]
for ix in range(lim1, lim2 + 1):
valuedIndices[index] = ix
yield iteration(conditions, currentCondition + 1, valuedIndices)
Bây giờ tôi muốn có thể làm:
for valued_indices in iteration(conditions, 0, {}):
...
yieldbằngyield fromtrong dòng cuối cùng của chức năng của bạn.