我有一个包含15个数字的列表,我需要编写一些代码来生成这些数字的所有32,768种组合.
我发现了一些代码(通过谷歌搜索)显然正在寻找我正在寻找的东西,但我发现代码相当不透明并且对使用它很谨慎.另外我觉得必须有一个更优雅的解决方案.
我发生的唯一事情就是循环遍历十进制整数1-32768并将它们转换为二进制,并使用二进制表示作为过滤器来选择适当的数字.
有谁知道更好的方法?使用map(),也许?
我正在尝试在Python中创建一组集合.我无法弄清楚该怎么做.
从空集开始xx:
xx = set([])
# Now we have some other set, for example
elements = set([2,3,4])
xx.add(elements)
Run Code Online (Sandbox Code Playgroud)
但我明白了
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
要么
TypeError: unhashable type: 'set'
Run Code Online (Sandbox Code Playgroud)
是否可以在Python中拥有一组集合?
我正在处理大量的集合,我希望能够不必处理重复的集合(集合A1,A2,......的集合B,如果Ai = Aj,则会"取消"两个集合)
itertools.permutations根据其位置而不是其值来生成其元素被视为唯一的位置.所以基本上我想避免重复这样的:
>>> list(itertools.permutations([1, 1, 1]))
[(1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1)]
Run Code Online (Sandbox Code Playgroud)
之后进行过滤是不可能的,因为在我的情况下排列量太大了.
有人知道合适的算法吗?
非常感谢你!
编辑:
我基本上想要的是以下内容:
x = itertools.product((0, 1, 'x'), repeat=X)
x = sorted(x, key=functools.partial(count_elements, elem='x'))
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为sorted创建一个列表并且itertools.product的输出太大.
对不起,我应该已经描述了实际问题.
我试图编写代码来解决标准的整数分区问题(维基百科).我写的代码很乱.我需要一个优雅的解决方案来解决问题,因为我想改进我的编码风格.这不是一个家庭作业问题.
给定一个字符串,我想生成所有可能的组合.换句话说,将逗号放在字符串中的所有可能方法.
例如:
input: ["abcd"]
output: ["abcd"]
["abc","d"]
["ab","cd"]
["ab","c","d"]
["a","bc","d"]
["a","b","cd"]
["a","bcd"]
["a","b","c","d"]
Run Code Online (Sandbox Code Playgroud)
我有点坚持如何生成所有可能的列表.组合将只给出包含字符串集子集长度的列表,排列将提供所有可能的订购方式.
由于遍历切片,我可以在列表中只使用一个逗号来创建所有情况,但是我不能用两个逗号来表示例如"ab","c","d"和"a","b" ,"光盘"
我的尝试w/slice:
test="abcd"
for x in range(len(test)):
print test[:x],test[x:]
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'等等.
我需要字符串子集的所有组合.此外,长度为1的子集后面只能跟一个长度> 1的子集.例如,对于字符串4824,结果应为:
[ [4, 824], [4, 82, 4], [48, 24], [482, 4], [4824] ]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我设法检索所有可能的子集:
length = len(number)
ss = []
for i in xrange(length):
for j in xrange(i,length):
ss.append(number[i:j + 1])
Run Code Online (Sandbox Code Playgroud)
这给了我:
['4', '48', '482', '4824', '8', '82', '824', '2', '24', '4']
Run Code Online (Sandbox Code Playgroud)
但我现在不知道如何将它们结合起来.
我正在尝试在Python 3中创建一个powerset.我找到了对该itertools
模块的引用,并且我使用了该页面上提供的powerset代码.问题是:代码返回itertools.chain对象的引用,而我想访问powerset中的元素.我的问题:如何做到这一点?
非常感谢您的见解.
我有以下清单:
['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来生成包含这些字符的所有可能的字符串,并具有以下限制:
aab,aba,abca等等是无效的)ab是有效的,即使c是不存在;a也即使有效b和c不存在)我可以用
[''.join(p) for p in permutations('abc')]
Run Code Online (Sandbox Code Playgroud)
生成包含a,b和 的所有字符串c。但是我也必须这样做
[''.join(p) for p in permutations('ab')]
[''.join(p) for p in permutations('ac')]
[''.join(p) for p in permutations('bc')]
Run Code Online (Sandbox Code Playgroud)
您可能会知道可用字符的初始列表是否很长,我需要做很多工作。所以我在 Python 中寻找一种优雅的方式来生成上述所有内容,只将允许的字符列表作为输入:
def generate(vals=['a', 'b', 'c']):
# The initial list of allowed characters also has to be part of the
# final list since these also represent …Run Code Online (Sandbox Code Playgroud) 我得到了一个列表列表s:
s = [["a1", "A"], ["b4", "B"], ["a3", "A"], ["d6", "D"], ["c4", "C"]]
Run Code Online (Sandbox Code Playgroud)
(请注意,列表中的元素不一定以相同的字母开头。为了方便起见,我在这里修改了数据。)
我的目标是将每个列表按其第二个元素排序到一个类别,并通过在每个类别中最多选择一个元素来获得所有可能的组合。
我首先将列表列表散列到字典中:
dic = {i[1]: [] for i in s}
for i in s:
# set the value of the first item key to the second item
dic[i[1]].append(i[0])
dic
>>> {'A': ['a1', 'a3'], 'B': ['b4'], 'C': ['c4'], 'D': ['d6']}
Run Code Online (Sandbox Code Playgroud)
所有可能组合的数量,即幂集的长度s,应该返回23:
{'a1'},
{'a3'},
{'b4'},
{'c4'},
{'d6'},
{'a1', 'b4'},
{'a1', 'c4'},
{'a1', 'd6'},
{'a3', 'b4'},
{'a3', 'c4'},
{'a3', 'd6'},
{'b4', 'c4'},
{'b4', …Run Code Online (Sandbox Code Playgroud) python ×10
combinations ×2
permutation ×2
algorithm ×1
collections ×1
hash ×1
nested ×1
python-2.7 ×1
python-3.x ×1
set ×1
string ×1
subset ×1