尝试学习如何搜索"类似模式" Python中列表中的序列,即查找列表中是否存在特定的整数序列。
我最好的想法是检查a)是否存在所有三个数字b)以查看它们的指数是否相继大于彼此。但是我得到了如此无法接受的输出:
import org.jpl7.JPL;
import org.jpl7.Query;
import org.jpl7.Term;
public class PrologApp {
public static void main(String[] args) {
Query.hasSolution("use_module(library(jpl))"); // only because we call e.g. jpl_pl_syntax/1 below
Term swi = Query.oneSolution("current_prolog_flag(version_data,Swi)").get("Swi");
System.out.println("swipl.version = " + swi.arg(1) + "." + swi.arg(2) + "." + swi.arg(3));
System.out.println("swipl.syntax = " + Query.oneSolution("jpl_pl_syntax(Syntax)").get("Syntax"));
System.out.println("swipl.home = " + Query.oneSolution("current_prolog_flag(home,Home)").get("Home").name());
System.out.println("jpl.jar = " + JPL.version_string());
System.out.println("jpl.dll = " + org.jpl7.fli.Prolog.get_c_lib_version());
System.out.println("jpl.pl = " + Query.oneSolution("jpl_pl_lib_version(V)").get("V").name());
}
}
有人可以查明上述代码逻辑中的缺陷吗?
答案 0 :(得分:0)
您的代码按预期工作。它只是测试索引的值是否小于彼此。它不会检查它们是否在列表中彼此直接相邻:
>>> first, second, third = (20, 56, 2)
>>> test_list = [43, 12, 20, 20, 56, 56, 2, 4, 98, 20]
>>> if all([x in test_list for x in [first, second, third]]):
... if test_list.index(first) < test_list.index(second) < test_list.index(third):
... print('output1')
... else:
... print('output2')
...
output1
>>> print(test_list.index(first))
2
>>> print(test_list.index(second))
4
>>> print(test_list.index(third))
6
答案 1 :(得分:0)
可能太先进,但很难抵抗'一线'理解......
ns = [20, 56, 2]
tl = [43, 12, 20, 20, 56, 56, 2, 4, 98, 20]
[sum(a == b for a, b in zip(ns, tl[i:])) for i in range(len(tl)-len(ns)+1)]
Out[31]: [0, 0, 1, 2, 2, 0, 0, 0]
模式松散地说'卷积':在另一个列表ns
上并行地逐渐滑动'核心'tl
,在匹配的位置值之间进行一些操作,对结果求和并收集总和在列表中的每个增量
for i in range(len(tl)-len(ns)+1)
生成索引i
a == b for a, b in zip(ns, tl[i:])
是sum()
zip(ns, tl[i:])
与从ns
开始的tl
相同的长度切片并排排列i
zip
会自动丢弃ecxcess tl
元素
我们可以sum
来自a == b
的布尔结果,因为'鸭子打字'会将True
,False
转变为1
,0
输出[0, 0, 1, 2, 2, 0, 0, 0]
是ns
中tl[i:]
i
i
range(len(tl)-len(ns)+1)
与ns
之间匹配数量的列表t1
和@if (auth()->user()->customer->package_id>0)
<li class="btn_disabled"> Allready Purchased</li>
@elseif(auth()->user()->customer->package_id==null)
<li class="buttonprice"><a href="{{route('updatepackage')}}">Purchase</a></li>
@endif
完全重叠的地方