相关疑难解决方法(0)

如何获得列表元素的所有可能组合?

我有一个包含15个数字的列表,我需要编写一些代码来生成这些数字的所有32,768种组合.

我发现了一些代码(通过谷歌搜索)显然正在寻找我正在寻找的东西,但我发现代码相当不透明并且对使用它很谨慎.另外我觉得必须有一个更优雅的解决方案.

我发生的唯一事情就是循环遍历十进制整数1-32768并将它们转换为二进制,并使用二进制表示作为过滤器来选择适当的数字.

有谁知道更好的方法?使用map(),也许?

python combinations

374
推荐指数
17
解决办法
56万
查看次数

如何在Python中创建一组集合?

我正在尝试在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,则会"取消"两个集合)

python collections nested set

111
推荐指数
4
解决办法
5万
查看次数

具有独特价值的排列

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的输出太大.

对不起,我应该已经描述了实际问题.

python permutation python-itertools

68
推荐指数
7
解决办法
3万
查看次数

用于整数分区的优雅Python代码

我试图编写代码来解决标准的整数分区问题(维基百科).我写的代码很乱.我需要一个优雅的解决方案来解决问题,因为我想改进我的编码风格.这不是一个家庭作业问题.

python algorithm

32
推荐指数
6
解决办法
3万
查看次数

分离字符串

给定一个字符串,我想生成所有可能的组合.换句话说,将逗号放在字符串中的所有可能方法.

例如:

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)

python permutation python-itertools

23
推荐指数
2
解决办法
703
查看次数

在Python中获取字符串及其子字符串的所有组合

我已经看到很多关于获取所有可能的子串(即,相邻的字符集)的问题,但没有关于生成所有可能的字符串,包括其子串的组合.

例如,让:

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'等等.

python string

14
推荐指数
2
解决办法
5778
查看次数

python字符串子集的所有组合

我需要字符串子集的所有组合.此外,长度为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 subset

7
推荐指数
1
解决办法
2914
查看次数

使用itertools在Python中的Powersets

我正在尝试在Python 3中创建一个powerset.我找到了对该itertools 模块的引用,并且我使用了该页面上提供的powerset代码.问题是:代码返回itertools.chain对象的引用,而我想访问powerset中的元素.我的问题:如何做到这一点?

非常感谢您的见解.

python python-itertools python-3.x

6
推荐指数
1
解决办法
9439
查看次数

如何在不重复的情况下生成一组字符的所有组合?

我有以下清单:

['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来生成包含这些字符的所有可能的字符串,并具有以下限制:

  • 可能不会出现字符多次(aababaabca等等是无效的)
  • 一个字符可以被排除在外(ab是有效的,即使c是不存在;a也即使有效bc不存在)

我可以用

[''.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)

python python-2.7

5
推荐指数
1
解决办法
3690
查看次数

获取列表列表的 powerset

我得到了一个列表列表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 hash combinations

4
推荐指数
1
解决办法
55
查看次数