如何在Python中生成列表的所有排列,与该列表中的元素类型无关?
例如:
permutations([])
[]
permutations([1])
[1]
permutations([1, 2])
[1, 2]
[2, 1]
permutations([1, 2, 3])
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
Run Code Online (Sandbox Code Playgroud) 我有一个包含15个数字的列表,我需要编写一些代码来生成这些数字的所有32,768种组合.
我发现了一些代码(通过谷歌搜索)显然正在寻找我正在寻找的东西,但我发现代码相当不透明并且对使用它很谨慎.另外我觉得必须有一个更优雅的解决方案.
我发生的唯一事情就是循环遍历十进制整数1-32768并将它们转换为二进制,并使用二进制表示作为过滤器来选择适当的数字.
有谁知道更好的方法?使用map(),也许?
查找包含k位的所有长度为n的二进制字符串的最佳算法是什么?例如,如果n = 4且k = 3,则有......
0111
1011
1101
1110
Run Code Online (Sandbox Code Playgroud)
我需要一个很好的方法来生成这些给定任何n和任何k所以我更喜欢用字符串来完成它.
编辑:这不是如何获得列表元素的所有可能组合的完全重复?
本主题是关于查找唯一组合,而另一个主题是关于查找所有组合.
如果我有一个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,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
Run Code Online (Sandbox Code Playgroud)
我想找到某个长度的所有可能的子列表,其中它们不包含一个特定的数字并且不会丢失数字的顺序.
例如,所有可能的长度为6而没有12的子列表是:
[1,2,3,4,5,6]
[2,3,4,5,6,7]
[3,4,5,6,7,8]
[4,5,6,7,8,9]
[5,6,7,8,9,10]
[6,7,8,9,10,11]
[13,14,15,16,17,18]
Run Code Online (Sandbox Code Playgroud)
问题是,我想在一个非常大的列表中进行,我想要最快捷的方式.
用我的方法更新:
oldlist = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
newlist = []
length = 6
exclude = 12
for i in oldlist:
if length+i>len(oldlist):
break
else:
mylist.append(oldlist[i:(i+length)]
for i in newlist:
if exclude in i:
newlist.remove(i)
Run Code Online (Sandbox Code Playgroud)
我知道这不是最好的方法,这就是为什么我需要一个更好的方法.
我有一个数字列表,我想从中组合.如果我有清单:
t = [2,2,2,2,4]
c = list(itertools.combinations(t, 4))
Run Code Online (Sandbox Code Playgroud)
结果是:
(2, 2, 2, 2)
(2, 2, 2, 4)
(2, 2, 2, 4)
(2, 2, 2, 4)
(2, 2, 2, 4)
Run Code Online (Sandbox Code Playgroud)
但我想得到:
(2, 2, 2, 2)
(2, 2, 2, 4)
Run Code Online (Sandbox Code Playgroud)
是否有可能消除重复,除了制作新的列表并通过第一个列表?
我有一个元素列表,比方说
list = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我想迭代这个列表中不同元素的一对,所以
for x, y in some_iterator(list):
print x, y
Run Code Online (Sandbox Code Playgroud)
应该表明
1 2
1 3
1 4
2 3
2 4
3 4
Run Code Online (Sandbox Code Playgroud)
请注意,我不希望list在此问题中使用所有组合.只是给定长度的组合.
这样做的最pythonic方式是什么?
如果我想对n-uples做同样的事情怎么办?例如,3元素的组合n
for x, y, z in another_iterator(list):
print x, y, z
Run Code Online (Sandbox Code Playgroud)
会表现出来
1 2 3
1 2 4
2 3 4
Run Code Online (Sandbox Code Playgroud) 我有一个输入
A = [2,0,1,3,2,2,0,1,1,2,0].
Run Code Online (Sandbox Code Playgroud)
下面我删除所有重复项
A = list(Set(A))
Run Code Online (Sandbox Code Playgroud)
A现在[0,1,2,3].现在我希望我可以使用此列表进行所有对组合,但是它们不需要是唯一的...因此[0,3]等于[3,0]和[2,3]等于[3,2].在这个例子中它应该返回
[[0,1],[0,2],[0,3],[1,2],[1,3],[2,3]]
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?我查看了iteratoolslib.但无法提出解决方案.
我需要k从长度列表中生成长度的所有组合n,我必须使用递归来完成.
例如:
INPUT: choose_sets([1,2,3,4],3)
OUTPUT: [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
Run Code Online (Sandbox Code Playgroud)
INPUT: choose_sets([1,2,3,4],2)
OUTPUT: [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
Run Code Online (Sandbox Code Playgroud)
我在代码中执行此操作时遇到困难,所以我很乐意提供一些帮助.到目前为止这是我的代码(我遗漏的东西只是不知道是什么):
def choose_sets(lst,k):
if k == len(lst):
return lst
if k == 0:
return []
if k > len(lst):
return []
sets=[]
sub_lst=lst[:]
sub_lst.remove(sub_lst[0])
a= choose_sets(sub_lst,k-1)
for i in a:
i.append(lst[0])
sets.append(a)
b= choose_sets(sub_lst,k)
sets.append(b)
return sets
Run Code Online (Sandbox Code Playgroud) 我正在尝试生成数字列表的所有n项组合,同时保持数字顺序.例如,如果列表是
[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
长度为3的有序组合将是:
[1,2,3]
[2,3,4]
[1,2,4]
[1,3,4]
Run Code Online (Sandbox Code Playgroud)
需要说明的是,我必须保持数字顺序,因此[1,4,2]不会是理想的结果.
是否有一个功能可以做到这一点,还是一个快速算法可以完成它?实际列表是111,我将选择100项.谢谢.
问题陈述
我想从我的列表中获取所有可能的组合(包括空列表)。
到目前为止我的代码是:
def combination(l):
result = []
for item in range(len(l)):
cut_list = l[:item] + l[item + 1:]
if len(cut_list) > 1:
combination(cut_list)
elif len(cut_list) == 1:
result += cut_list
return result
print(combination([1, 2, 3]))
Run Code Online (Sandbox Code Playgroud)
我的输出是一个空列表
[]
Run Code Online (Sandbox Code Playgroud)
我想要这个输出:
[[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)
我很确定我的退货有些不对劲。
非常感谢任何帮助。
python ×10
combinations ×6
permutation ×3
algorithm ×2
list ×2
recursion ×2
binary ×1
bits ×1
iterator ×1
python-2.5 ×1
return ×1