如何从一组列表中获取笛卡尔积(每种可能的值组合)?
输入:
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) ...]
Run Code Online (Sandbox Code Playgroud) 给定一套
{0, 1, 2, 3}
Run Code Online (Sandbox Code Playgroud)
生成子集的好方法是什么:
[set(),
{0},
{1},
{2},
{3},
{0, 1},
{0, 2},
{0, 3},
{1, 2},
{1, 3},
{2, 3},
{0, 1, 2},
{0, 1, 3},
{0, 2, 3},
{1, 2, 3},
{0, 1, 2, 3}]
Run Code Online (Sandbox Code Playgroud) 我需要能够创建一个包含输入列表的所有可能组合的列表.例如,列表[1,2,3]应该返回[1 [1,2] [1,3] 2 [2,3] 3 [1,2,3]]
列表不必具有任何特定顺序.在这个网站上我发现了很多使用它的函数,itertools但是当我只需要一个函数时它们就会返回对象list.
编辑:这不是如何获得列表元素的所有可能组合的完全重复?
本主题是关于查找唯一组合,而另一个主题是关于查找所有组合.
如果我有一个python列表:
L = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
什么是获得列表中3个元素的所有可能独特组合的最佳方式,如下所示:
["1,2,3", "1,2,4", "2,3,4", "3,4,1"]
Run Code Online (Sandbox Code Playgroud)
组合中元素的顺序无关紧要.例如,"1,2,3"与"3,2,1"将被认为是相同的组合.
我可以写一些循环来做到这一点,但我认为可能有一个单行可以做同样的事情.
我有一个数组 [1,2,3]
我想使用数组的所有元素进行所有可能的组合:
结果:
[[1], [2], [3]]
[[1,2], [3]]
[[1], [2,3]]
[[1,3], [2]]
[[1,2,3]]
Run Code Online (Sandbox Code Playgroud) 我已经看到很多关于获取所有可能的子串(即,相邻的字符集)的问题,但没有关于生成所有可能的字符串,包括其子串的组合.
例如,让:
x = 'abc'
Run Code Online (Sandbox Code Playgroud)
我希望输出类似于:
['abc', 'ab', 'ac', 'bc', 'a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
重点是我们可以删除原始字符串中不相邻的多个字符(以及相邻的字符).
这是我到目前为止所尝试的:
def return_substrings(input_string):
length = len(input_string)
return [input_string[i:j + 1] for i in range(length) for j in range(i, length)]
print(return_substrings('abc'))
Run Code Online (Sandbox Code Playgroud)
但是,这只会从原始字符串中删除相邻字符串集,并且不会返回'ac'上面示例中的元素.
另一个例子是,如果我们使用字符串'abcde',输出列表应该包括的内容'ace','bd'等等.
我想知道是否有任何方法可以n从数字列表中获取所有长度组合.
例如,如果我的列表是[1, 2, 3, 4],我想输出(如果我选择n = 3)
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
像[2,1,3]这样的其他排列对我没用.
我试图弄清楚哪些服装客户一起购买。我可以找出确切的组合,但是我不知道的问题是包含组合+其他的计数。
例如,我有:
Cust_num Item Rev
Cust1 Shirt1 $40
Cust1 Shirt2 $40
Cust1 Shorts1 $40
Cust2 Shirt1 $40
Cust2 Shorts1 $40
Run Code Online (Sandbox Code Playgroud)
这应导致:
Combo Count
Shirt1,Shirt2,Shorts1 1
Shirt1,Shorts1 2
Run Code Online (Sandbox Code Playgroud)
我能做的最好的就是独特的组合:
Combo Count
Shirt1,Shirt2,Shorts1 1
Shirt1,Shorts1 1
Run Code Online (Sandbox Code Playgroud)
我试过了:
df = df.pivot(index='Cust_num',columns='Item').sum()
df[df.notnull()] = "x"
df = df.loc[:,"Shirt1":].replace("x", pd.Series(df.columns, df.columns))
col = df.stack().groupby(level=0).apply(','.join)
df2 = pd.DataFrame(col)
df2.groupby([0]).size().reset_index(name='counts')
Run Code Online (Sandbox Code Playgroud)
但这仅仅是独特的计数。
执行以下操作的有效算法是什么:给定列表,我们必须输出长度为n的所有元素组合.假设x = ['a','b','c','d','e']和n = 2.输出应为:
[['a'], ['b'], ['c'], ['d'], ['e'], ['a', 'b'], ['a', 'c'], ['a', 'd'], ['a', 'e'], ['b', 'c'], ['b', 'd'], ['b', 'e'], ['c', 'd'], ['c', 'e'], ['d', 'e']]
Run Code Online (Sandbox Code Playgroud) 我有一个令牌列表,如:
hel
lo
bye
Run Code Online (Sandbox Code Playgroud)
我想生成这些字符串的所有可能组合,例如:
hello
lohel
helbye
byehel
lobye
byelo
Run Code Online (Sandbox Code Playgroud)
语言不重要,有什么建议吗?
我发现使用bash生成排列,但这会在一行上进行排列.