Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python itertools.product()的替代品?_Python_Itertools_Variations - Fatal编程技术网

Python itertools.product()的替代品?

Python itertools.product()的替代品?,python,itertools,variations,Python,Itertools,Variations,我有以下代码: # Mec capacity to hold a vnf served_vnfs = [0,1,2] # All possible mec states as far as holded vnfs mec_capacity_states = [copy.deepcopy(list(s)) for s in itertools.product(served_vnfs, repeat=2)] # All possible states with defined n

我有以下代码:

# Mec capacity to hold a vnf
served_vnfs         = [0,1,2]

# All possible mec states as far as holded vnfs
mec_capacity_states = [copy.deepcopy(list(s)) for s in itertools.product(served_vnfs, repeat=2)]

# All possible states with defined number of mecs
mecs_states = [copy.deepcopy(list(p)) for p in itertools.product(mec_capacity_states, repeat=2)]
当我执行以下操作时:

mec_states[0][0][0] = 'A'
print(mec_states)
我得到的第一个值是:

[['A', 0], ['A', 0]]
这不是应该的,而是应该:

[['A', 0], [0, 0]],
我一直在使用copy.deepcopy()来避免这种情况,但我认为问题在于代码行:

mecs_states = [copy.deepcopy(list(p)) for p in itertools.product(mec_capacity_states, repeat=NUM_MECS)]
这个问题发生在子列表相等的任何组合中


我可以使用的任何替代方案?

使用deepcopy将为您提供一个数据结构,其中原始对象中的任何共享引用也会反映在副本中

如果要删除任何共享引用,可以使用json进行序列化和反序列化

import json

# All possible states with defined number of mecs
mecs_states = itertools.product(mec_capacity_states, repeat=2)
mecs_states = json.loads(json.dumps(list(mecs_states)))

请注意,
deepcopy
将适用于任何python数据结构。只有当数据结构表现良好时,json方法才有效。它必须是非循环的,子对象必须是简单类型,如列表、整数、字符串等。

使用deepcopy将提供一个数据结构,其中原始对象中的任何共享引用也会反映在副本中

如果要删除任何共享引用,可以使用json进行序列化和反序列化

import json

# All possible states with defined number of mecs
mecs_states = itertools.product(mec_capacity_states, repeat=2)
mecs_states = json.loads(json.dumps(list(mecs_states)))

请注意,
deepcopy
将适用于任何python数据结构。只有当数据结构表现良好时,json方法才有效。它必须是非循环的,并且子元素必须是简单类型,如列表、整数、字符串等。

序列化和反序列化列表列表,因为如果
服务的\u vnfs
中的元素是简单的可序列化对象(如整数),而不需要保留标识,则在中肯定会起作用。但似乎有很多不必要的工作,特别是如果列表可能更长的话

一种可能更简单的方法是复制从外部调用
itertools.product
返回的每个列表。由于这只是列表的一个浅拷贝,因此无需使用
copy
模块:

serviced_vnfs=[0,1,2]
mec_容量_状态=列表(itertools.product(已提供vnfs,重复=2))
mecs_州=[列表(地图(列表,p))
对于itertools.产品中的p(mec_容量_状态,
重复(2)]
测试(截断以避免滚动):

>mecs_州[0][0][0]=“a”
>>>美加苏州
[a',0],[0,0],[0,0],[0,1],[0,0],[0,2],[0,0],[1,0]。。。

如果
服务的\u vnfs
中的元素是简单的可序列化对象(如整数),不需要保留标识,则序列化和反序列化列表(如中的)肯定会起作用。但这似乎是很多不必要的工作,尤其是如果列表可能更长的话

一种可能更简单的方法是只复制从外部调用
itertools.product
返回的每个列表。由于这只是列表的浅拷贝,因此不需要使用
copy
模块:

serviced_vnfs=[0,1,2]
mec_容量_状态=列表(itertools.product(已提供vnfs,重复=2))
mecs_州=[列表(地图(列表,p))
对于itertools.产品中的p(mec_容量_状态,
重复(2)]
测试(截断以避免滚动):

>mecs_州[0][0][0]=“a”
>>>美加苏州
[a',0],[0,0],[0,0],[0,1],[0,0],[0,2],[0,0],[1,0]。。。

我建议将
所有状态
函数中主变量的名称更改为其他名称,但
所有状态
除外。此外,我不清楚为什么要将所有状态的列表转换为字典,除了对它们进行计数。这可以在函数之外完成。是否可以在r作为一个例子?您的代码非常复杂。请将问题简化为再现问题所需的最低代码。编辑后,
状态
的定义丢失。我建议将
所有状态
函数中的主变量名称改为其他名称,但
所有状态
。此外,我不清楚为什么要将所有状态的列表转换为字典,除了计算它们。这可以在函数之外完成。是否可以将此示例的代码重新构造为?您的代码非常复杂。请将问题简化为再现问题所需的最低代码。在edi之后t、
的定义声明
丢失。因此,代码中不需要使用copy.deepcopy()。顺便说一下,Thx!!!您的建议适用于我的较大代码。是的。如果您使用
json.loads(json.dumps(data))
,则不需要使用deepcopy。因此,不需要使用copy.deepcopy()在代码中?顺便说一句!你的建议在我的大代码中有效。是的。如果你执行
json.loads(json.dumps(data))
,你就不需要deepcopy了。