小编Joo*_*ost的帖子

为什么有人会检查'x in list'?

在Python中,可以使用in-operator 非常容易地检查容器中是否包含值.我想知道为什么有人会in在列表中使用-operator,但是当首次将列表转换为集合时,它会更有效:

if x in [1,2,3]:
Run Code Online (Sandbox Code Playgroud)

而不是

if x in set([1,2,3]):
Run Code Online (Sandbox Code Playgroud)

在查看时间复杂度时,第一个具有O(n)而第二个在O(1)处优越.使用第一个的唯一原因是它的可读性和写入时间更短吗?或者是否有一个特殊情况下使用它更实用?为什么Python开发人员没有实现第一个,首先将它转换为第二个?这不会使O(1)的复杂性变得很大吗?

python list set

4
推荐指数
1
解决办法
432
查看次数

Bash在变量中转义文件名中的空格

我对Bash很新,所以这可能是微不足道的,但我只是没有得到它.我正试图逃避文件名中的空格.看一看.请注意,这是一个"工作示例" - 我得到的交错文件与空白页面可能更容易完成,但我在这里是关于空间.

#! /bin/sh

first=true
i=combined.pdf
o=combined2.pdf
for f in test/*.pdf
do
    if $first; then
        first=false
        ifile=\"$f\"
    else
        ifile=$i\ \"$f\"
    fi
    pdftk $ifile blank.pdf cat output $o
    t=$i
    i=$o
    o=$t
    break
done
Run Code Online (Sandbox Code Playgroud)

假设我有一个名为my file.pdf(带空格)的文件.我希望ifile变量包含字符串combined.pdf "my file.pdf",这样pdftk就可以将它用作两个文件参数 - 第一个是combined.pdf,第二个是my file.pdf.

我已经尝试了各种方法来逃避(无论是否首先逃避引号本身等),但它仍然在分裂myfile.pdf执行pdftk时.

编辑:澄清:我正在尝试将一个变量中的多个文件名(作为多个参数)传递给pdftk命令.我希望它能识别两个文件名之间的区别,但不能在空格处撕开一个文件名.

bash escaping spaces

4
推荐指数
1
解决办法
1万
查看次数

Python命名约定:指示函数是否改变参数

我想知道是否有一个适当的Python约定来区分改变其参数的函数或者保留其参数的函数并返回修改后的副本.例如,考虑两个应用某些排列的函数.函数f将列表作为参数并对元素进行混洗,而函数g采用列表,复制,应用f然后返回更改的副本.

对于上面的例子,我想,f可以被称为permute(x),而g可以是permutation(x),使用动词和名词来区分.然而,这并不总是最佳的,并且在某些情况下,它可能会导致关于参数是否会在此过程中发生变化的混淆 - 特别是如果f要返回其他值.

有没有一种标准的方法来处理这个问题?

python coding-style pep8 naming-conventions

4
推荐指数
1
解决办法
142
查看次数

Prolog:模拟析取事实

我有一个我想解决的逻辑问题,所以我想,"我知道,我会尝试Prolog!"

不幸的是,我几乎立即遇到了一堵砖墙.其中一个假设是一个分离的事实; A,B或C是真的(或多于一个),但我不知道哪个.我已经知道这是Prolog不支持的.

那里有很多文档可以解决这个问题,但大多数文档似乎立即涉及更复杂的概念并解决了更高级的问题.我正在寻找的是一种模拟定义上述事实的孤立方式(由于Prolog的限制,不可能直接定义它).

我怎么能解决这个问题?我能以某种方式将它包装在规则中吗?

编辑:我意识到我还不是很清楚.鉴于我对Prolog缺乏熟悉,我不想在尝试传达问题时陷入语法错误,而是采用自然语言.我想这没有用,所以无论如何我都会在伪Prolog中试一试.

直观地说,我想要做的就是这样,宣布要么foo(a),foo(b)或者说foo(c),但是我不知道哪个:

foo(a); foo(b); foo(c).
Run Code Online (Sandbox Code Playgroud)

然后我会期望以下结果:

?- foo(a); foo(b); foo(c).
true
Run Code Online (Sandbox Code Playgroud)

不幸的是,我试图宣布的事实(即foo(x)至少保留一个x \in {a, b, c})不能这样定义.具体来说,它导致No permission to modify static procedure '(;)/2'.

旁注:在宣布?- foo(a).析取事实之后,从逻辑角度来看,我的结果有点不清楚; 它显然不是true,但false也没有涵盖它 - 在这种情况下,Prolog根本没有足够的信息来回答该查询.

编辑2:这里有更多的背景,使其更像一个真实的场景,因为我可能过度简化和丢失了翻译细节.

假设涉及三个人.爱丽丝,鲍勃和查理.鲍勃持有两张牌{1, 2, 3, 4}.爱丽丝问他问题,回答这个问题,他向她展示了查理没看到的一张卡片,或者没有显示卡片.如果有更多卡适用,Bob只会显示其中一张卡.查理的任务是了解鲍勃持有的牌.正如人们所预料的那样,查理是一个自动化系统.

爱丽丝问Bob"你有1还是2?",鲍勃向Alice展示了一张卡片.查理现在得知鲍勃拥有1或2.

爱丽丝然后询问"你有一个2或3",鲍勃没有卡片显示.显然,鲍勃有一个1,他之前向爱丽丝展示过.基于这两个事实,查理现在应该能够得出这一点.

我想要建模的是Bob拥有1或2(own(Bob, 1) \/ own(Bob, 2))的知识,而Bob不拥有2或3(not (own(Bob, 2) \/ own(Bob, 3))).现在应该查询Bob是否拥有1 true; 查理可以得出这个.

logic prolog

4
推荐指数
1
解决办法
429
查看次数

指定对象配置的 Pythonic 方式

我有一个需要 5 个配置参数的对象,如下所示;

class A(object):

    def __init__(self, a=1, b=2, c=3, d=4, e=4):
        self.a = a
        self.b = b
        self.c = c
        self.d = d
        self.e = e
Run Code Online (Sandbox Code Playgroud)

但是,我想提供几组默认配置,而不仅仅是一组,例如(1, 2, 1, 2, 1)(5, 4, 3, 2, 1),并且最好给它们提供合理的名称。最Pythonic 的方法是什么?我考虑过的一些选项是@classmethod生成实例的选项,或配置实例的实例方法。

python constructor

3
推荐指数
1
解决办法
1225
查看次数

迄今为止的 Django 模板标签 ISO

在我看来,这个问题与这个问题类似,但又截然不同。

我有一个具有一些日期时间属性的对象。为了序列化它并存储为 JSON 字符串,我调用该.isoformat方法(使用自定义 JSON 编码器)。

相反,我希望 Django 模板标签能够为我解决这个问题。我有一个 JSON 对象,通过调用将其转换为字典json.loads2015-10-07T14:57:00.501597+00:00当我简单地将其称为 时,生成的属性具有值{{ my_object.date }}。然而,当我将它传递给date模板标记时,我根本没有得到任何输出。我正在尝试{{ my_object.date | date }},但也有类似的事情{{ my_object.date | date:'Y-m-d' }}

date 不能转换这些值吗?我清楚地记得在某个时候这样做过,但不确定具体细节。

有没有办法正确调试这个?现在我没有看到任何输出,日志中也没有出现任何内容。

python django django-templates

3
推荐指数
1
解决办法
1936
查看次数

删除元素以排序数组

我正在寻找一种算法来排序数组,但不是通过移动值.相反,我想删除尽可能少的值并最终得到一个排序列表.基本上我想找到最长的升序子阵列.

为了显示:

1 4 5 6 7 2 3 8
Run Code Online (Sandbox Code Playgroud)

应该成为(2删除)

1 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

而不是(5删除)

1 2 3
Run Code Online (Sandbox Code Playgroud)

我可以看到我如何以一种天真的方式做到这一点,即通过递归检查每个元素的'remove'和'dont remove'树.我只是想知道是否有更快/更有效的方法来做到这一点.这种问题有一个共同的算法吗?

sorting algorithm

1
推荐指数
1
解决办法
1058
查看次数

使用结果将方法应用于所有方法

当涉及函数式语言时,我想起了一种在对象列表上调用方法的方法,其中下一个方法调用使用前一个调用的结果作为输入以及下一个列表项.

在Python中,以下代码使用for循环执行相同的操作(在此实例中,它基于整数列表构建二叉树).假设binary_insert将树和整数作为参数.

t = None
for x in [4, 2, 1, 5, 6, 3, 7, 9, 8, 12, 10, 11, 13, 15, 14]:
    t = binary_insert(t, x)
print t
Run Code Online (Sandbox Code Playgroud)

基本上我试图记住那种功能应用程序的名称.如果有一个Python等价物,那就太棒了.

python functional-programming

0
推荐指数
1
解决办法
49
查看次数