- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建了一个脚本,它使用以下代码迭代 sCharacters 字符串中的所有字符组合:
sCharacters = "abcdefghijklmnopqrstuvwxyz0123456789"
iKeyLength = len(sCharacters)
for sCharacterCombination in itertools.product(sCharacters, repeat=iKeyLength):
# Do Stuff Here
然而,我只对在 sCharacterCombination 中没有单个字符出现超过 n 次的组合感兴趣。例如;我想过滤掉像这样的字符串aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
并且只得到像7efad3ca411bf57f1df57c0b4e9282aa
我尝试只检查每个 sCharacterCombination
,但这并不好,因为我仍然必须遍历一堆我永远不会使用的项目。
我怎样才能让迭代器基于每个项目创建列表,每个项目没有单个字符首先表示超过 n
次,这样我就不必迭代项目我不会用?
如果我能说,那就太棒了:
这样我就可以说单个字符最多可以在 sCharacterCombination 中出现四次,但连续出现的次数不能超过两次。例如。这没问题 1121...
但这不是 1112...
。
感谢您的宝贵时间。
最佳答案
这里有一些代码比您当前的方法更有效。
首先,我们使用 itertool 的 combinations_with_replacement
函数来创建所需长度的组合,过滤掉重复次数超过所需次数的组合。然后我们排列每个组合;我使用的排列算法(由 14 世纪的印度数学家 Narayana Pandita 创建)可以正确处理重复,这与 itertools 中的不同。然后我们使用 itertool 的 groupby 来过滤掉包含相同字符且长度大于允许的运行长度的排列。
我包含了两个函数:permutations_with_limited_repetition
限制相同字符的运行长度; permutations_with_repetition
没有。
请注意,输入序列必须从低到高排序,否则该算法将无法正常运行。
from itertools import combinations_with_replacement, groupby
def lexico_permute(a):
a = list(a)
yield a
n = len(a) - 1
while True:
for j in range(n-1, -1, -1):
if a[j] < a[j + 1]:
break
else:
return
v = a[j]
for k in range(n, j, -1):
if v < a[k]:
break
a[j], a[k] = a[k], a[j]
a[j+1:] = a[j+1:][::-1]
yield a
def permutations_with_repetition(seq, length, maxrepeat):
for combo in combinations_with_replacement(seq, length):
if any(combo.count(c) > maxrepeat for c in combo):
continue
yield from lexico_permute(combo)
def permutations_with_limited_repetition(seq, length, maxrepeat, maxrun):
for combo in combinations_with_replacement(seq, length):
if any(combo.count(c) > maxrepeat for c in combo):
continue
for perm in lexico_permute(combo):
if any(len(list(g)) > maxrun for _, g in groupby(perm)):
continue
yield perm
# Test
src = list('abcde')
for lst in permutations_with_limited_repetition(src, 3, 2, 1):
print(''.join(lst))
输出
aba
aca
ada
aea
bab
abc
acb
bac
bca
cab
cba
abd
adb
bad
bda
dab
dba
abe
aeb
bae
bea
eab
eba
cac
acd
adc
cad
cda
dac
dca
ace
aec
cae
cea
eac
eca
dad
ade
aed
dae
dea
ead
eda
eae
bcb
bdb
beb
cbc
bcd
bdc
cbd
cdb
dbc
dcb
bce
bec
cbe
ceb
ebc
ecb
dbd
bde
bed
dbe
deb
ebd
edb
ebe
cdc
cec
dcd
cde
ced
dce
dec
ecd
edc
ece
ded
ede
有关排列算法的注释(非生成器)版本,请参阅 this answer我去年写的。
第一个过滤器
if any(combo.count(c) > maxrepeat for c in combo):
可以通过使用与第二个过滤器相同的 groupby
技术来提高效率:
if any(len(list(g)) > maxrepeat for _, g in groupby(combo)):
(我应该昨天就想到了,但我原本不打算做第二个过滤器,这是最后一刻的灵感)。
关于python - 如何创建一个迭代器来生成项目,其中没有项目的单个字符在 python 中表示超过 n 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37764682/
Byte byte1=10; Short short1=20; Integer integer=30; 在上面的代码中自动装箱成功在这里查看下面的代码,我正在明确地进行 casitng,因为它默认将
这里有几个相关的问题。 根据标题,如果我们将变量类型指定为 long 或 float、double,为什么它是一个要求?编译器不会在编译时评估变量的类型吗? Java 将所有整型文字视为 int -
我最近一直在使用一些 bash 脚本,并且一直在浏览手册页。根据我收集到的信息,$(( )) 是否表示 expr 而 [ ] 是否表示 test? 对于 $(( )): echo $(( 5 + 3
我有 UILabel,其中显示了 int 值,我希望如果值以千为单位,例如 1000,那么标签应该在 2000 年及以后显示 1k 和 2k。如何实现? 最佳答案 这个怎么样? int myNum =
我正在自学 verilog 并尝试编写失败模型。我在指定部分遇到了以下 ck->q 延迟弧的建模,但无法理解它到底是做什么的。 (posege CK => (Q : 1'b1))=(0, 0); 谁能
考虑这样一个句子: John Smith travelled to Washington. 在美好的一天,名称标记者会将“约翰·史密斯”识别为一个人,将“华盛顿”识别为一个地方。然而,如果没有其他证据
有没有办法通过某种元处理器或预处理器告诉 JavaScript 单词 AND 等于 && 而单词 OR 等于 ||和 <> 等同于 !===? 也许将 THEN 等同于 { 结束到 不要! 最佳答案
我正在处理一个非常大的图,它有 5 亿个节点,节点的平均度为 100。所以它是一种稀疏图。我还必须存储每条边的权重。我目前正在使用两个 vector ,如下所示 // V could be 100 m
我想使用 Python 表示一组整数范围,其中可以动态修改该集合并测试其是否包含在内。具体来说,我想将其应用于文件中的地址范围或行号。 我可以定义我关心的地址范围: 200 - 400 450 -
>>> x = -4 >>> print("{} {:b}".format(x, x)) -4 -100 >>> mask = 0xFFFFFFFF >>> print("{} {:b}".forma
虽然代码不多,但简单明了 复制代码 代码如下: preg_match('/^(?!string)/', 'aa') === true 这个用来验证一个字符串是否是非'string'开头的,
我正在尝试创建一些 SQLAlchemy 模型,并且正在努力解决如何将 timedelta 正确应用于特定列的问题。 timedelta(以天为单位指定)作为整数存储在单独的表 (Shifts) 中,
“Range: bytes=0-” header 是什么意思?是整个文件吗?我尝试发回 0 个字节但没有成功,当我发送整个文件时它可以正常工作,但我在流式上下文中不止一次收到此请求,它看起来不正确。
要创建时间序列的 SAX 表示,您首先需要计算数据的 PAA(分段聚合近似),然后将答案映射到符号表。但是,在计算 PAA 之前,您需要对数据进行标准化。 我正在对数据进行标准化,但我不知道之后如何计
假设我有一个 RESTful、超文本驱动的服务来模拟冰淇淋店。为了帮助更好地管理我的商店,我希望能够显示每日报告,列出所售每种冰淇淋的数量和美元值(value)。 这种报告功能似乎可以作为名为 Dai
我需要以 RDF 格式表示句子。 换句话说,“约翰喜欢可乐”将自动表示为: Subject : John Predicate : Likes Object : Coke 有谁知道我应该从哪里开始?是否
我即将编写一个解析器,将文本文件逐行读取到不同类型的结构中,并将这些结构提供给回调(观察者或访问者 - 尚不确定)。 文本文件包含 MT-940 数据 - SWIFT 银行对帐单。 这些行由一个指定类
我主要是一名 C++ 开发人员,但我经常编写 Python 脚本。我目前正在为游戏编写骰子模拟器,但我不确定在 Python 中解决我的问题的最佳方法。 一共有三种玩家技能,每个玩家一强、中一、弱一。
在过去的 5 个小时里,我一直在寻找答案。尽管我找到了很多答案,但它们并没有以任何方式提供帮助。 我基本上要寻找的是任何 32 位无符号整数的按位异或运算符的数学、算术唯一表示。 尽管这听起来很简单,
我需要将依赖项存储在 DAG 中。 (我们正在细粒度地规划新的学校类(class)) 我们正在使用 rails 3 注意事项 宽于深 很大 我估计每个节点有 5-10 个链接。随着系统的增长,这将增加
我是一名优秀的程序员,十分优秀!