不使用遞歸且不引入標准庫,單純用兩個for循環即可得出一個list的所有子集
L = [1, 2, 3, 4]
List = [[]]
for i in range(len(L)): # 定長
for j in range(len(List)): # 變長
sub_List = List[j] + [L[i]]
if sub_List not in L:
List.append(sub_List)
print('List =', List)
主要思想:
變長的 List 中的所有元素將會被不斷地重復遍歷,直到遍歷完定長的 L
當然,不進行條件判斷也行:
L = [1, 2, 3, 1] List = [[]] for i in range(len(L)): # 定長 for j in range(len(List)): # 變長 List.append(List[j] + [L[i]]) print('List =', List)
最后,如果考慮到程序的效率問題,那么建議引入 python 標准庫中的 itertools,然后調用 combinations 這個函數
這樣可以更加高效地得到一個 list 的所有的子集
代碼如下:
from itertools import combinations L = [1, 2, 3, 1] result_list = sum([list(map(list, combinations(L, i))) for i in range(len(L) + 1)], []) print('result_list =', result_list)