小编dan*_*gom的帖子

Pythonic类型的提示与熊猫?

让我们采用一个简单的函数,它接受一个str并返回一个数据帧:

import pandas as pd
def csv_to_df(path):
    return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
Run Code Online (Sandbox Code Playgroud)

为此函数添加类型提示的推荐pythonic方法是什么?

如果我向python询问它返回的DataFrame的类型pandas.core.frame.DataFrame.以下内容不起作用,因为它会告诉我大熊猫没有定义.

 def csv_to_df(path: str) -> pandas.core.frame.DataFrame:
     return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
Run Code Online (Sandbox Code Playgroud)

python typing

28
推荐指数
5
解决办法
8827
查看次数

为什么加法和乘法比比较更快?

我一直认为比较是计算机可以执行的最快的操作.我记得在D. Knuth的演讲中听到它,他在那里按降序编写循环"因为与0的比较很快".我还读到乘法应该比这里的加法慢.

我很惊讶地看到,在Python 2和Mac下,在Linux和Mac下都进行了测试,比较似乎比算术运算慢得多.

谁有人解释为什么?

%timeit 2 > 0
10000000 loops, best of 3: 41.5 ns per loop

%timeit 2 * 2
10000000 loops, best of 3: 27 ns per loop

%timeit 2 * 0
10000000 loops, best of 3: 27.7 ns per loop

%timeit True != False
10000000 loops, best of 3: 75 ns per loop

%timeit True and False
10000000 loops, best of 3: 58.8 ns per loop
Run Code Online (Sandbox Code Playgroud)

并在python 3下:

$ ipython3
Python 3.5.2 | packaged …
Run Code Online (Sandbox Code Playgroud)

python performance

21
推荐指数
2
解决办法
2973
查看次数

GNU在MacOS上找到

我已经下载了find自制的GNU版本:

brew install findutils --with-default-names
Run Code Online (Sandbox Code Playgroud)

当我继续奔跑时which,find我得到了我的期望:

$ which find
/usr/local/bin/find
Run Code Online (Sandbox Code Playgroud)

但是,当我使用时find,系统会回退到OS X默认值/usr/bin/find,即:

$ find -exec file {} \;
find: illegal option -- e
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
       find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

$ /usr/local/bin/find -exec file {} \;
.: directory
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我怎样才能find正常工作?

macos find

14
推荐指数
3
解决办法
5070
查看次数

按偶数和奇数索引对矢量进行排序.C++

是否有一个单线程(或简单的无环路)解决方案,通过偶数和奇数索引对矢量进行排序?例:

long entries[] = {0,1,2,10,11}; // indices 0 1 2 3 4
std::vector<long> vExample(entries, entries + sizeof(entries) / sizeof(long) );

vExample.sortEvenOdd(vExample.begin(),vExample.end()); // magic one liner I wish existed...

for (int i = 0; i < vExample.size(); i++)
{
    std::cout << vExample[i] << " ";
}
Run Code Online (Sandbox Code Playgroud)

现在我想得到以下输出:

0 2 11 1 10 // corresponding to indices 0 2 4 1 3
Run Code Online (Sandbox Code Playgroud)

c++ vector std

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

如何在Lisp中格式化REPL输出的数字精度?

我的问题是:
如何设置REPL打印输出的精度?

举个例子,这个简单的函数在这里:

(defun gaussian (rows cols sigma)
  (let ((filter (make-array `(,rows ,cols)))
    (rowOffset (/ (- rows 1) 2.0))
    (colOffset (/ (- cols 1) 2.0)))
    (loop for i from 0 to (- rows 1)
       do (loop for j from 0 to (- cols 1)
           do (setf (aref filter i j)
            (gaussDistVal i j rowOffset ColOffset sigma))))
    filter))
Run Code Online (Sandbox Code Playgroud)

如果我打电话(gaussian 5 5 1),我的输出如下:

#2A((0.01831564 0.082085 0.13533528 0.082085 0.01831564)
    (0.082085 0.36787945 0.60653067 0.36787945 0.082085)
    (0.13533528 0.60653067 1.0 0.60653067 0.13533528)
    (0.082085 0.36787945 …
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp number-formatting

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

使用if/then进行正则表达式预测非捕获

我有一些我想修复的损坏的JSON文件.问题是其中一个字段AcquisitionDateTime格式不正确:

{
    "AcquisitionDateTime": 2016-04-28T17:09:39.515625,
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是将值包装在括号内.我可以用正则表达式轻松地做到这一点:

perl -pi -e 's/\"AcqDateTime\": (.*),/\"AcqDateTime\": \"\1\",/g' t.json
Run Code Online (Sandbox Code Playgroud)

现在,我想扩展正则表达式,以便在JSON没有被破坏的情况下,内容不会在""中被包装两次.我面临的问题是我不知道如何混合前瞻,if/then语句和捕获组.这是我的尝试:

Lookahead, if you find a ", then capture what is between it. Else capture everything.
perl -pi -e 's/\"AcqDateTime\": (?(?=\")\"(.*)\"|(.*)),/\"AcqDateTime:\" \"\1\",/g' t.json
Run Code Online (Sandbox Code Playgroud)

这是我有兴趣纠正的部分:

Lookahead for a \"  -> if yes, then capture without it. \"(.*)\" Else capture all (.*)
(?(?=\")\"(.*)\"|(.*)),
Run Code Online (Sandbox Code Playgroud)

有人会向我解释我做错了什么吗?

提前致谢.

regex perl json

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

如何在Pharo中获得类似emacs的键绑定?

我今天已经下载了Pharo,我注意到大多数键绑定在语言环境中不起作用.有没有办法让标准的Mac/Linux键绑定工作?

我在Google上找不到任何答案.

如果有人能告诉我如何配置标准,我会很感激

Ctrl+a, BeginningOfLine
Ctrl+e, EndOfLine
Ctrl+d, forwardDelete
Ctrl+f, forwardChar
Ctrl+b, backwardChar
Ctrl+n, nextLine
Ctrl+p, previousLine
Run Code Online (Sandbox Code Playgroud)

在Pharo 5.0上工作.

keyboard-shortcuts pharo

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

如何使用python从多个维基百科页面中抓取数据?

我想抓住年龄,出生地和以前的参议员职业.维基百科在各自的页面上提供了每个参议员的信息,还有另一个页面,其中的表格列出了所有参议员的姓名.我如何浏览该列表,点击每个参议员各自页面的链接,并获取我想要的信息?

这是我到目前为止所做的.

1.(没有python)发现DBpedia存在并编写了一个查询来搜索参议员.不幸的是,DBpedia没有对大部分(如果有的话)进行分类:

 SELECT ?senator, ?country WHERE {
   ?senator rdf:type <http://dbpedia.org/ontology/Senator> .
   ?senator <http://dbpedia.org/ontology/nationality> ?country
 }
Run Code Online (Sandbox Code Playgroud)

查询结果不令人满意.

2.发现有一个叫做python的模块wikipedia允许我从各个维基页面搜索和检索信息.用它通过查看超链接从表中获取参议员名称列表.

import wikipedia as w
 w.set_lang('pt')

 # Grab page with table of senator names.
 s = w.page(w.search('Lista de Senadores do Brasil da 55 legislatura')[0])

 # Get links to senator names by removing links of no interest
 # For each link in the page, check if it's a link to a senator page.
 senators = [name for name in s.links …
Run Code Online (Sandbox Code Playgroud)

python wikipedia

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

Swift中的键值观察4

我在Swift 4项目中有以下代码.

class DishesTableViewController : UITableViewController {


    private var token :NSKeyValueObservation?

    @objc dynamic private(set) var dishes :[Dish] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        // configure the observation
        token = self.observe(\.dishes) { object, change in

            // change is always nil
            print(object)
            print(change)
        }

        updateTableView()
    }
Run Code Online (Sandbox Code Playgroud)

每当更换餐具阵列时,都会触发观察.但我的问题是如何才能获得发生的实际更改,即如何访问触发更改的实际Dish对象?

key-value-observing swift swift4

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

正确使用jupyter CLI参数?

免责声明我使用jupyter kernel,但问题也与此有关jupyter notebook

据称jupyter kernel --help-all,我应该能够通过设置一个名为的参数来更改jupyter内核JSON连接文件--KernelManager.connection_file

如果我正确理解这一点,则意味着以下命令:

jupyter kernel --KernelManager.connection_file=connection.json
Run Code Online (Sandbox Code Playgroud)

应该启动一个内核,并给我一个名为connection.json的连接文件。

但是,这就是我得到的:

? jupyter kernel --KernelManager.connection_file='test-this-thing.json'
[KernelApp] Starting kernel 'python3'
[KernelApp] Connection file: /Users/me/Library/Jupyter/runtime/kernel-1e65d0fe-bf8e-1234-8208-463bd4a1234a.json
Run Code Online (Sandbox Code Playgroud)

现在,jupyter不会抱怨我传递了错误的参数,也没有传递任何东西,只是没有更改连接文件。

难道我做错了什么?如何正确更改连接文件名?

jupyter jupyter-notebook

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