所有可能的字符串可能是

时间:2019-02-09 01:14:47

标签: python python-3.x

我想要python中的一个函数,该函数可以将所有以1个字符开头的字符串(如'a','ab','ba','abc'转换为char的x,直到到达char的x为止,然后尝试所有可能在其中的char字符串

这就是我尝试过的:

from itertools import imap
     for string in imap(''.join,itertools.product('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', repeat=62)):
         print(string)

但是此代码的问题是它以所有62个字符开头,如下所示: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad

以此类推

如果有人可以向我解释发生了什么事,我不知道为什么要诚实

3 个答案:

答案 0 :(得分:1)

我认为您误解了可选参数repeat的用法。当您放置repeat=62时,等于您将62 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'放置到itertools.product中。这就是为什么输出始终是62个字符的字符串的原因。

以下代码应该有效并且易于理解

from itertools import permutations

def all_perms(iters):
    for n in range(1, len(iters) + 1):
        for perm in permutations(iters, n):
            yield perm

for res in all_perms('abc'):
    print(''.join(res))

或者通过在Python3中使用yield from来缩短

from itertools import permutations

def all_perms(iters):
    for n in range(1, len(iters) + 1):
        yield from permutations(iters, n)

答案 1 :(得分:0)

您可能想使用public class relocationzone extends GeoJsonObject { @JsonInclude(JsonInclude.Include.ALWAYS) private Map<String, Object> properties = new HashMap<String, Object>(); @JsonInclude(JsonInclude.Include.ALWAYS) // Expected JSON data private GeoJsonObject geometry; private String id; private String _id; private String updatedAt;; private String name; private String _v; private String createdAt; private String legacyId; public void setProperty(String key, Object value) { properties.put(key, value); } @SuppressWarnings("unchecked") public <T> T getProperty(String key) { return (T)properties.get(key); } public Map<String, Object> getProperties() { return properties; } public void setProperties(Map<String, Object> properties) { this.properties = properties; } public GeoJsonObject getGeometry() { return geometry; } public void setGeometry(GeoJsonObject geometry) { this.geometry = geometry; } public String getId() { return id; } public void setId(String id) { this.id = id; } } 使用powerset配方的修改版本。另外,如果将itertools.permutations标记为Python 3.x,我不确定为什么要使用imap。我将只使用maprange;如果需要,将其更改为imapxrange

from itertools import chain, permutations

def all_perms(iterable):
    s = list(iterable)
    return chain.from_iterable(permutations(s, r) for r in range(len(s) + 1))

for s in map(''.join, all_perms('abc')):
    print(s)

顺序按长度排序略有不同:

a
b
c
ab
ac
ba
bc
ca
cb
abc
acb
bac
bca
cab
cba

答案 2 :(得分:0)

这应该有效:

import itertools

ls = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
result = []
n = 3
for i in range(1,n+1):
    result.extend(list(itertools.permutations(ls[:i])))

只需将n定义为您的限制