我想要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
以此类推
如果有人可以向我解释发生了什么事,我不知道为什么要诚实
答案 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
。我将只使用map
和range
;如果需要,将其更改为imap
和xrange
:
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定义为您的限制