我想详尽地分析用于排序小数组的子程序,并且需要一种方法来生成特定长度的所有唯一排序的数组.在Python中,这将是具有非负整数作为元素的列表,并且最好在可能时使用最小整数.例如,N = 3:
[[0,0,0],
[0,0,1],
[0,1,0],
[0,1,1],
[0,1,2],
[0,2,1],
[1,0,0],
[1,0,1],
[1,0,2],
[1,1,0],
[1,2,0],
[2,0,1],
[2,1,0]]
Run Code Online (Sandbox Code Playgroud)
[1,1,1]并[2,2,0]没有在上面的列表中属于,因为[0,0,0]并[1,1,0]分别具有相同的相对顺序,同时使用较小的整数.
我可以用蛮力做到这一点,但是我希望有聪明的编码,或者是现有的功能,或者我没有意识到的东西...
所以我想要一些数字的例子:
00000000001111110000
11111100000000000000
01010101010100000000
10101010101000000000
00100100100100100100
Run Code Online (Sandbox Code Playgroud)
完整排列。除非结果只有六个1。不多。不低于。64或32位将是理想的。16位(如果提供答案)。
我正试图找到一种方法来为y长度的x值生成唯一的排列.我想要做的是:
[0,1].unique_permutations(15)
# => [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
# ... massive snip
# [1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1],
# [1, 0, 1, 1, 0, 1, 0, 0, …Run Code Online (Sandbox Code Playgroud) 问题:我有一些数字列表,例如[1,1,2]. 我需要生成唯一的排列。排列是[1,1,2],[1,1,2],[1,2,1],[1,2,1],[2,1,1],[2,1,1]。我只需要生成唯一的排列,即[1,1,2],[1,2,1],[2,1,1].
我的尝试:我的第一次尝试是保留一组现有的排列,并为itertools.permutations生成器创建一个过滤器,该过滤器将使用该组过滤掉重复项。但是,出于效率原因,我宁愿不首先生成这些排列。即使对于 12 个数字的小列表,也只有 1% 是唯一的。
我有一个我似乎无法完全弄清楚的想法的开始:我可以在我的列表中创建唯一值的排列,即[1,2],将剩余的数字放在所有不同的地方。
感谢您的帮助,并且要明确的是,我不想过滤掉重复的排列,我只想首先生成唯一的排列。
我有一个 1 和 2 的列表,例如 [2, 1, 1, 1] 我需要获得所有可能的组合:
[[2, 1, 1, 1],
[1, 2, 1, 1],
[1, 1, 2, 1],
[1, 1, 1, 2]]
Run Code Online (Sandbox Code Playgroud)
我尝试使用 itertools 的产品,但是,它多次返回相同的结果(例如 [2, 1, 1, 1]),并且在输入较大时效率低下。是否有一些内置功能用于这样的事情?
我希望找到列表的独特排列,x = ["$ 5","$ 10","$ 10","TAX","$ 5","20%","BOGO","BOGO","税" "]以9人为一组
我目前正在做的是
from itertools import permutations
x = ["$5", "$10", "$10", "TAX", "$5", "20%", "BOGO", "BOGO", "TAX"]
combos = []
for i in permutations(x, 9):
if i not in combos:
combos.append(i)
print combos
Run Code Online (Sandbox Code Playgroud)
然而,这需要太长时间才能运行,我想知道是否有人能给我一个更有效的解决方案.
原谅我的无知.我目前有一个脑屁,无法找到解决方案.假设我有一份清单[1, 1, 0, 0].我想计算所有四位二进制数,它们恰好有两个1和两个零,如:
['0110', '0011', '0101', '1100', '1010', '1001']
Run Code Online (Sandbox Code Playgroud)
这有效:
from itertools import permutations
set([''.join(x) for x in list(permutations('0011', 4))])
Run Code Online (Sandbox Code Playgroud)
但是这会计算整个排列,然后丢弃副本.意思是,它计算了24次,但我只需要6次[1, 1, 1, 1, 0, 0, 0, 0].如果收集的话,它会更加重要.
这应该很容易,但我无法绕过它.
想象一下,我们有一个股票清单:
stocks = ['AAPL','GOOGL','IBM']
Run Code Online (Sandbox Code Playgroud)
具体的股票并不重要,重要的是我们在这个清单中有n个项目.
想象一下,我们还有一个权重列表,从0%到100%:
weights = list(range(101))
Run Code Online (Sandbox Code Playgroud)
给定n = 3(或任何其他数字),我需要生成一个矩阵,其中每个可能的权重组合总和达到100%.例如
0%, 0%, 100%
1%, 0%, 99%
0%, 1%, 99%
etc...
Run Code Online (Sandbox Code Playgroud)
是否有一些itertools的方法可以做到这一点?什么东西在numpy?最有效的方法是什么?
我有一个字符串显示 mxn 网格中的步骤,就像这个问题: https ://leetcode.com/problems/unique-paths/
step = 'DDRR'
Run Code Online (Sandbox Code Playgroud)
D 表示“向下”,R 表示“向右” 我想显示无需替换的排列,我发现 Python 内置了 itertools。但是它说:
元素根据其位置而不是其值被视为唯一。因此,如果输入元素是唯一的,则不会有重复值。
因此,当我使用 itertools.permutation(step,4) 时,它包含许多重复。
>>> itertools.permutations(step,4)
('D', 'D', 'R', 'R')
('D', 'R', 'D', 'R')
('D', 'R', 'R', 'D')
('D', 'R', 'D', 'R')
('D', 'R', 'R', 'D')
('D', 'D', 'R', 'R')
('D', 'D', 'R', 'R')
('D', 'R', 'D', 'R')
('D', 'R', 'R', 'D')
('D', 'R', 'D', 'R')
('D', 'R', 'R', 'D')
('R', 'D', 'D', 'R')
('R', 'D', 'R', 'D')
('R', 'D', 'D', 'R')
('R', 'D', 'R', …Run Code Online (Sandbox Code Playgroud)