在bash中你可以这样做:
echo test >&1 (重定向到stdout,虽然它已经去了那里)echo test >&2 (重定向到stderr)echo test >&0 (重定向到标准输入)当我做最后一个时,我的终端仍然test像其他两个一样打印,但很难知道为什么.首先,为什么这个有用呢?其次,重定向到stdin有什么好的用途吗?
我有一组任意的项目(下面的点),以及一些以任意方式重叠的类别(下面的AC).测试是确定是否可以将每个项目分配给它已经属于的单个类别,使得每个类别最终具有至少一些项目.
因此,例如,我们可能要求A,B和C各自声明一个项目.如果我们给下面的所有4个点,表明这是可能的很简单:只需将所有项目放在列表中,循环浏览类别,并让每个类别删除它也可以访问的项目,只要每个类别能够删除一个项目,我们通过测试.

现在假设我们删除蓝点并重复测试.很明显,我们可以将黄色分配给A,将红色分配给B,将绿色分配给C,然后我们再次通过.但是很难编写这个解决方案:如果我们按照前面的方法(再次没有蓝点),那么假设A从去除绿点开始.现在,如果B去掉黄点,我们将无法通过测试(因为C不能移除红点),而如果B移除红点,C仍然可以取黄并通过.
人们可以通过蛮力解决这个问题,通过迭代每个可能的项目分配到类别,检查每个迭代是否满足条件,但这不能很好地扩展到任意数量的项目和类别,我有一种感觉有一个更聪明或更有效的方式.
我不知道这个问题的名称,这使得研究很难.它有最佳解决方案吗?如果是这样,我对解决方案有什么样的复杂性?
我正在使用n维数组,我想要一种方法来反转编号维度.所以而不是
rev = a[:,:,::-1]
Run Code Online (Sandbox Code Playgroud)
我希望能够写作
rev = a.reverse(dimension=2)
Run Code Online (Sandbox Code Playgroud)
或类似的东西.我似乎无法找到不依赖于前一种语法的示例.
我知道emacs可以通过扩展,-*- mode -*-第一行,甚至shebang线识别文件,但是如果我想覆盖shebang怎么办?
例如,以.开头的脚本
#!/usr/bin/env python2.7
...
Run Code Online (Sandbox Code Playgroud)
单独的shebang线不会被认可.我也无法添加-*-python-*-一行,因为shell会尝试解析它.我该如何处理?
我试图把泊松连续误差条上的柱状图我与matplotlib做,但我似乎无法找到将给予我95%的置信区间假设泊松数据numpy的功能.理想情况下,解决方案不依赖于scipy,但任何事情都可行.这样的功能存在吗?我发现了很多关于自举的内容,但在我看来这似乎有些过分.
我在bash中有一个函数,它向stdout输出一串行.我想将它们组合成一行,它们之间有一些分隔符.
之前:
one
two
three
Run Code Online (Sandbox Code Playgroud)
后:
one:two:three
Run Code Online (Sandbox Code Playgroud)
有什么简单的方法可以做到这一点?
我使用Python 2 API包装了很多C++(由于各种技术原因,我不能使用像swig或boost.python这样的东西).当我必须将一个字符串(通常是一个路径,总是ASCII)传递给C/C++时,我使用这样的东西:
std::string file_name = PyString_AsString(py_file_name);
if (PyErr_Occurred()) return NULL;
Run Code Online (Sandbox Code Playgroud)
现在我正在考虑更新到Python 3,其中PyString_*不存在方法.我找到了一个解决方案,说我应该这样做:
PyObject* bytes = PyUnicode_AsUTF8String(py_file_name);
std::string file_name = PyBytes_AsString(bytes);
if (PyErr_Occurred()) return NULL;
Py_DECREF(bytes);
Run Code Online (Sandbox Code Playgroud)
然而,这是两倍的行,看起来有点难看(更不用说如果我忘记了最后一行,它可能会引入内存泄漏).
另一种选择是重新定义python函数以bytes对象进行操作,并像这样调用它们
def some_function(path_name):
_some_function(path_name.encode('utf8'))
Run Code Online (Sandbox Code Playgroud)
这并不可怕,但它确实需要每个函数的python端包装器.
有没有更清洁的方法来处理这个?
在git中,我有一个分支A.我创建了另一个分支B,我创建了一些提交.然后我想快进分支A到分支B.
我知道我可以结账A,并快速进行最新的提交B.此操作需要对工作副本进行两次修改:第一次返回A,然后将工作副本还原为B.如果新提交B包含大量更改,则操作可能会非常慢.
是否可以在不更改工作副本的情况下快速转发另一个分支?(换句话说,只移动指针A)
我很清楚地知道,有列表和元组之间的差异和元组不只是不断名单,但有其中两个实际上是由区别对待的几个例子的代码(由编码约定反对),所以我(草率地)可以互换地使用它们.
然后我遇到了一个案例,他们给出了完全不同的行为:
>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
[3, 4, 5]])
Run Code Online (Sandbox Code Playgroud)
谁能解释这里发生了什么?更重要的是,这个陷阱还有什么地方出现在scipy中?
以下内容从未在Python 3.6中打印任何内容
from itertools import product, count
for f in product(count(), [1,2]):
print(f)
Run Code Online (Sandbox Code Playgroud)
相反,它只是坐在那里燃烧CPU.问题似乎是,product如果迭代器超过无限空间,则永远不会返回迭代器,因为它product首先评估完整的迭代器.鉴于它product应该是一个发电机,这是令人惊讶的.
我本来期望这开始计数(到无穷大),类似于这个生成器的行为(直接从文档中获取):
for tup in ((x,y) for x in count() for y in [1,2]):
print(tup)
Run Code Online (Sandbox Code Playgroud)
但是,当我的发电机立即开始计数时,使用的发电机product根本不会计数.
其他工具itertools做我期望的.例如,以下内容:
for f in takewhile(lambda x: True, count()):
print(f)
Run Code Online (Sandbox Code Playgroud)
将打印一个数字流因为takewhile是懒惰的.