【发布时间】:2020-02-15 23:34:54
【问题描述】:
使用 python,我试图通过仅更改列表中的特定元素来查找列表的所有组合。例如,如果我有一个列表 [1,2,3,4,5,6,7,8,9] 并向其附加 3 个字符串,我会:
[1,2,3,4,5,6,7,8,9,'string','string','string']
然后我想找出当只允许更改字符串的位置时列表可以采用的所有组合。
例如
[1,2,3,4,5,'string',6,7,8,9,'string','string']
[1,2,'string',3,4,5,'string',6,7,'string',8,9]
['string',1,'string',2,3,4,'string',5,6,7,8,9]
等,同时仍以相同的升序保持原始数字列表。 我不一定要一次存储每个简单的组合,我只是在尝试类似:
- 遍历所有可能的组合
- 对于每种可能性,检查一个条件
- 如果为真,则将列表分配给一个变量
- 如果为假,则继续迭代
我一直试图找到一个解决方案,而不必使用不合理数量的 for 循环,这将适用于可能附加更多字符串的更大列表。我一直在考虑使用 itertools 但似乎找不到方法。
我发现的一个解决方案可能是只使用itertools.permutations(带有附加字符串的列表),然后使用条件检查数字是否按升序排列,但我担心这种方法效率低下并且会占用大量资源内存,尤其是在处理较大的列表时。
任何帮助将不胜感激,在此先感谢。
【问题讨论】:
-
一种方法可能是将位置视为索引,获取索引的所有 3 长排列,然后通过插入字符串按需创建列表(如果需要)。
-
字符串是否允许相互重新排序?
-
是的,你可以重新排序字符串
标签: python list loops recursion itertools