Skip to main content
 首页 » 编程设计

python之如何创建一个列表或一组 N 深对象中的每个排列

2025年05月04日19davidwang456

我有一个 Action 对象的元组

我想创建一个包含 N 深 Action 对象的所有可能排列的列表。

即如果我有 Eat、Sleep、Drink 和 N = 2 等 Action

列表是

[[Eat, Eat], 
 [Eat, Sleep], 
 [Eat, Drink], 
 [Sleep, Eat], 
 [Sleep, Sleep], 
 [Sleep, Drink], 
 [Drink, Eat], 
 [Drink, Sleep], 
 [Drink, Drink]] 

现在,我的列表比三个 Action 大得多,N 可能是 3 个或更多。

我如何在 Python 2.7 中执行此操作?

请您参考如下方法:

听起来你想要 Cartesian product自己的列表。使用 itertools.product() :

>>> import itertools, pprint 
>>> mylist = ["Eat","Sleep","Drink"] 
>>> my_combination = list(itertools.product(mylist, repeat = 2)) 
>>> pprint.pprint (my_combination) 
[('Eat', 'Eat'), 
 ('Eat', 'Sleep'), 
 ('Eat', 'Drink'), 
 ('Sleep', 'Eat'), 
 ('Sleep', 'Sleep'), 
 ('Sleep', 'Drink'), 
 ('Drink', 'Eat'), 
 ('Drink', 'Sleep'), 
 ('Drink', 'Drink')] 

可选的 repeat 参数控制列表的“深度”。

请注意,列表的大小会随着深度 N 呈指数增长。不要一次具体化整个列表 - 相反,一次使用一个元素。

# Don't do this - will crash Python with out-of-memory error 
list(itertools.product(my_list, repeat = 100000)) 
 
# Iterate over the list instead 
for one_combination in itertools.product(my_list, repeat = 100000): 
    print (one_combination)