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 i
phạm vi biến từ 1 đến 5 và bên trong biến vòng lặp đó j
nằ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 yield
phầ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, {}):
...
yield
bằngyield from
trong dòng cuối cùng của chức năng của bạn.