当我在Python中编写代码时,我经常需要根据某些条件从列表或其他序列类型中删除项目.我还没有找到优雅高效的解决方案,因为从当前正在迭代的列表中删除项目是不好的.例如,你不能这样做:
for name in names:
if name[-5:] == 'Smith':
names.remove(name)
Run Code Online (Sandbox Code Playgroud)
我通常最终做这样的事情:
toremove = []
for name in names:
if name[-5:] == 'Smith':
toremove.append(name)
for name in toremove:
names.remove(name)
del toremove
Run Code Online (Sandbox Code Playgroud)
这是无效的,相当丑陋和可能有错误(它如何处理多个'John Smith'条目?).有没有人有更优雅的解决方案,或者至少更有效?
那个与词典一起工作的人怎么样?
我有一个div使用overflow:auto来保持div内的内容,因为它被调整大小并在页面上拖动.我正在使用一些ajax从服务器检索文本行,然后将它们附加到div的末尾,因此内容正在向下增长.每次发生这种情况时,我都希望使用JS将div滚动到底部,以便最近添加的内容可见,类似于聊天室或命令行控制台的工作方式.
到目前为止,我一直在使用这个代码片段(我也使用jQuery,因此$()函数):
$("#thediv").scrollTop = $("#thediv").scrollHeight;
Run Code Online (Sandbox Code Playgroud)
然而,它给了我不一致的结果.有时它可以工作,有时不工作,如果用户调整div或手动移动滚动条,它就会完全停止工作.
目标浏览器是Firefox 3,它被部署在受控环境中,因此根本不需要在IE中工作.
有什么想法吗?这个让我难过.谢谢!
V8的文档解释了如何创建包装C++对象的Javascript对象.Javascript对象保持指向C++对象实例的指针.我的问题是,假设您在堆上创建C++对象,如何在gc收集Javascript对象时收到通知,这样您就可以释放堆分配的C++对象?
如果我打电话os.stat()给一个破碎的symlink,python会抛出OSError异常.这使它有助于找到它们.但是,还有一些其他原因os.stat()可能引发类似的异常.symlinks在Linux下有没有更精确的方法来检测Python 损坏?
我在HTML页面上有一个表单,其中有多个提交按钮,可执行不同的操作.但是,当用户在文本输入中键入值并点击输入时,浏览器通常表现为按顺序激活下一个提交按钮.我想要一个特定的动作发生,所以我发现一个解决方案是在有问题的文本输入后直接将不可见的提交按钮放入HTML中,如下所示:
<input type="text" name="something" value="blah"/>
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input type=submit name="something_else" value="Destroy Earth" />
...
<input id="foobar" type=submit name="desired" value="Save Earth" />
Run Code Online (Sandbox Code Playgroud)
这在大多数浏览器中都很有魅力,除了它在Safari和Chrome等webkit浏览器中没有.出于某种原因,他们跳过了隐形提交按钮.我一直试图弄清楚如何拦截输入键按下并使用Javascript激活正确的提交,但我无法让它工作.拦截keydown并将注意力集中在正确的提交上是行不通的.
有没有办法使用Javascript或其他方式选择当用户点击HTML表单上的文本输入中的回车键时将使用哪个提交按钮?
编辑:为了澄清,表单不能要求Javascript从根本上"工作".如果在webkit浏览器上没有Javascript,我不在乎输入密钥提交是否是不可取的,但是我无法删除或更改提交按钮的顺序.
这是我尝试过的,它不会改变webkit浏览器中的提交行为.
有用的是将以下代码中的focus()更改为click().
document.onkeypress = processKey;
function processKey(e)
{
if (null == e)
e = window.event ;
if (e.keyCode == 13) {
document.getElementById("foobar").click(); // previously: focus()
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:最终解决方案:
适用于每个浏览器,只在需要时拦截输入密钥:
HTML:
<input type="text" name="something" value="blah"
onkeydown="return processKey(event)" />
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input …Run Code Online (Sandbox Code Playgroud) 我正在尝试在PHP中实现自己的序列化/ var_dump样式函数.如果存在圆形阵列(有)的可能性似乎是不可能的.
在最近的PHP版本中,var_dump似乎检测到循环数组:
php > $a = array();
php > $a[] = &$a;
php > var_dump($a);
array(1) {
[0]=>
&array(1) {
[0]=>
*RECURSION*
}
}
Run Code Online (Sandbox Code Playgroud)
我如何在PHP中实现我自己的序列化类型的方法,可以类似地检测?我不能只是跟踪我访问过的数组,因为数组在PHP严格比较返回包含相同的元素,并比较圆形阵列导致致命错误,反正不同的阵列真.
php > $b = array(1,2);
php > $c = array(1,2);
php > var_dump($b === $c);
bool(true)
php > $a = array();
php > $a[] = &$a;
php > var_dump($a === $a);
PHP Fatal error: Nesting level too deep - recursive dependency? in php shell code on line 1
Run Code Online (Sandbox Code Playgroud)
我找了一种方法来找到一个数组的唯一id(指针),但我找不到一个.spl_object_hash仅适用于对象,而不适用于数组.如果我将多个不同的数组转换为对象,它们都会获得相同的spl_object_hash值(为什么?).
编辑:
在每个数组上调用print_r,var_dump或serialize,然后使用某种机制来检测这些方法检测到的递归的存在是算法复杂性的噩梦,并且基本上会使任何使用太慢而不能在大型嵌套数组上实用.
接受的回答: …
使用普通的ModelAdmin类,我可以使用以下命令设置顺序:
ordering = ("field_name",)
Run Code Online (Sandbox Code Playgroud)
似乎没有为InlineModelAdmin设置排序的选项.有没有办法让内联元素按特定字段排序?
我无法从Python文档中看出re.compile(x)函数是否可能抛出异常(假设您传入一个字符串).我想有些东西可以被认为是无效的正则表达式.更大的问题是,我在哪里可以找到给定的Python库调用是否会抛出异常以及它们是什么?
我一直试图理解如何从回溯的Prolog谓词中产生一系列值.内置谓词between/3将在回溯时一次生成一个范围内的所有整数,因此编写它的示例可以帮助我完成任务.
我在现有的Prolog系统中寻找了一个实现,但between/3GNU Prolog 的实现是一个C函数,其技巧是调用另一个C函数"Pl_Create_Choice_Point",它允许它在回溯时产生额外的值.
如果我在Intellij的Scala工作表顶部导入对象的内容,当我向对象添加新内容时,在工作表中找不到它们.即使在我构建项目并重新评估工作表之后,它也找不到新属性.自动完成功能.如果我退出并重新启动IntelliJ,它的工作原理.
这是错误:
java.lang.NoSuchMethodError: Arith$.foo()Ljava/lang/String;
at #worksheet#.get$$instance$$res6(ArithWS.sc:15)
at A$A1$.main(ArithWS.sc:41)
at #worksheet#.#worksheet#(ArithWS.sc)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,它似乎编译,但在运行时失败.这是一个正常的SBT项目.IntelliJ 2017.2.5,Scala 2.12.3.选择"生成项目"复选框没有帮助.实际上,没有复选框的组合使其工作.重建项目或工作表无论如何都无济于事.只有重新启动IntelliJ才能使工作表获取新代码.
Arith.scala中的示例代码:
object Arith {
val foo = "foo"
}
Run Code Online (Sandbox Code Playgroud)
示例工作表ArithWS.sc:
import Arith._
foo
Run Code Online (Sandbox Code Playgroud)