小编ins*_*get的帖子

在一行中捕获多个异常(块除外)

我知道我能做到:

try:
    # do something that may fail
except:
    # do this if ANYTHING goes wrong
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

try:
    # do something that may fail
except IDontLikeYouException:
    # say please
except YouAreTooShortException:
    # stand on a ladder
Run Code Online (Sandbox Code Playgroud)

但如果我想在两个不同的例外中做同样的事情,我现在能想到的最好的就是这样做:

try:
    # do something that may fail
except IDontLikeYouException:
    # say please
except YouAreBeingMeanException:
    # say please
Run Code Online (Sandbox Code Playgroud)

有什么办法我可以做这样的事情(因为两个例外的行动都是say please):

try:
    # do something that may fail
except IDontLikeYouException, YouAreBeingMeanException:
    # say please
Run Code Online (Sandbox Code Playgroud)

现在这真的不起作用,因为它符合以下语法:

try:
    # do something that may fail
except …
Run Code Online (Sandbox Code Playgroud)

python exception-handling exception

2521
推荐指数
6
解决办法
72万
查看次数

Python连接文本文件

我有一个包含20个文件名的列表['file1.txt', 'file2.txt', ...].我想编写一个Python脚本来将这些文件连接成一个新文件.我可以打开每个文件f = open(...),通过调用逐行读取f.readline(),并将每行写入该新文件.它对我来说似乎不是很"优雅",尤其是我必须阅读的部分//逐行写.

在Python中有更"优雅"的方法吗?

python file-io concatenation

150
推荐指数
7
解决办法
22万
查看次数

Python3整数除法

在Python3和Python2.6中,我注意到我可以分割两个整数并得到一个浮点数.你如何得到Python2.6的行为?是否有不同的方法来获取int/int = int?

python division python-3.x

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

带字符串索引的Python数组

是否可以在python中使用字符串作为数组中的索引?

例如:

myArray = []
myArray["john"] = "johns value"
myArray["jeff"] = "jeffs value"
print myArray["john"]
Run Code Online (Sandbox Code Playgroud)

python arrays dictionary list

63
推荐指数
2
解决办法
13万
查看次数

实现HashMap

如何从头开始在C中创建Hashmap?考虑什么参数以及如何测试hashmap有多好?就像在您说哈希映射完成之前需要运行的基准测试用例一样.

c unit-testing hashmap

42
推荐指数
3
解决办法
11万
查看次数

高级嵌套列表理解语法

我正在玩列表推导以更好地理解它们,我遇到了一些我无法解释的意外输出.我之前没有找到这个问题,但如果是/是/重复的问题,我道歉.

我本质上是在尝试编写一个生成生成器的生成器.使用列表推导的简单生成器如下所示:

(x for x in range(10) if x%2==0) # generates all even integers in range(10)
Run Code Online (Sandbox Code Playgroud)

我试图做的是编写一个生成两个生成器的生成器 - 第一个生成范围(10)中的偶数,第二个生成范围(10)中的奇数.为此,我做了:

>>> (x for x in range(10) if x%2==i for i in range(2))
<generator object <genexpr> at 0x7f6b90948f00>

>>> for i in g.next(): print i
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <genexpr>
UnboundLocalError: local variable 'i' referenced before assignment
>>> g.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in …
Run Code Online (Sandbox Code Playgroud)

python syntax scope list-comprehension

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

itertools.ifilter与 过滤器 列表理解

我试图更熟悉itertools模块,并找到了一个名为的函数ifilter.

根据我的理解,它基于给定的函数进行过滤和迭代,并在包含函数计算结果的iterable元素的列表上返回一个迭代器True.

问题1:到目前为止我的理解是否正确?

问题2:除了返回和迭代器之外,它与内置filter函数有什么不同?

问题3哪个更快?

据我所知,事实并非如此.我错过了什么吗?(我跑了下面的测试)

>>> itertools.ifilter(lambda x: x%2, range(5))
<itertools.ifilter object at 0x7fb1a101b210>
>>> for i in itertools.ifilter(lambda x: x%2, range(5)): print i
... 
1
3
>>> filter(lambda x: x%2, range(5))
[1, 3]
>>> function = lambda x: x%2
>>> [item for item in range(5) if function(item)]
[1,3]
Run Code Online (Sandbox Code Playgroud)

python module function built-in

25
推荐指数
3
解决办法
2万
查看次数

Java:d​​ouble vs float

在另一个Bruce Eckel练习中,我编写的代码采用了一种方法并在另一个类中更改了值.这是我的代码:

class Big {
  float b;
}

public class PassObject {
  static void f(Letter y) {
    y.c = 'z';
  } //end f()
  static void g(Big z) {
    z.b = 2.2;
  }

  public static void main(String[] args ) {
    Big t = new Big();
    t.b = 5.6;
    System.out.println("1: t.b : " + t.b);
    g(x);
    System.out.println("2: t.b: " + t.b);
  } //end main
}//end class
Run Code Online (Sandbox Code Playgroud)

它抛出的错误是"可能会损失精确度".

PassObject.java:13: possible loss of precision
found: double
required : float   z.b = 2.2
passobject.java:20: possible …
Run Code Online (Sandbox Code Playgroud)

java floating-point double types casting

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

从现在起5秒后运行命令`

作为稍微复杂的脚本的一部分,我需要告诉服务器运行模拟.通常,我会这样做ssh user@server 'simulation/script'.但是,这样做会使ssh会话保持活着直到'simulation/script'完成,这对我来说是不可取的.

我最近了解了这个at命令,它似乎很适合我的问题.
我现在要做的是ssh到我的服务器,at我的模拟脚本在5秒内运行(ssh连接关闭的时间已经足够).因此,一旦ssh连接在5秒内关闭,服务器将启动模拟,而不需要ssh连接保持活动状态.

我遇到的麻烦是at为了安排工作所需的时间表达"从现在起5秒"

我尝试了以下时间表达式,所有这些都给了我错误:

now + 5 seconds
now + 5 sec
now + 5 s
now + 5seconds
now + 5sec
now + 5 s
now+5sec
now+5seconds
now+5s
Run Code Online (Sandbox Code Playgroud)

如何at"从现在起5秒钟" 让我的命令运行?

linux bash scheduled-tasks

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

有效地查找Python数组/列表中N个最大元素的索引

如果这是一个重复的问题,我很抱歉,我查找了这些信息,但仍然无法找到它.

是否可以通过非常有效地使用递减顺序的N个最大元素的索引来排列numpy数组(或python列表)?

例如,数组:

a = array([4, 1, 0, 8, 5, 2])
Run Code Online (Sandbox Code Playgroud)

降序中最大元素的索引将给出(考虑N = 6,包括所有元素):

8 - > 3

5 - > 4

4 - > 0

2 - > 5

1 - > 1

0 - > 2

result = [3, 4, 0, 5, 1, 2]
Run Code Online (Sandbox Code Playgroud)

我知道如何使用一些有点愚蠢的方法来制作它(比如对数组进行排序并搜索其索引中的每个N个数字),但我想知道是否有任何有效的库,如瓶颈或heapq,或者可能是pythonic方法这非常快.我必须在几个阵列中应用它,每个阵列有300k元素,这就是性能问题的原因.

提前致谢!

UPDATE

我读了答案并决定使用300k的随机整数来计算它们,结果如下:

解决方案1: sorted(range(len(a)), key=lambda i:a[i]) 时间: 230毫秒

解决方案2: heapq.nlargest(len(a), zip(a, itertools.count())) 时间: 396毫秒

解决方案3: heapq.nlargest(len(a), enumerate(a), key=operator.itemgetter(1)) 时间: 864毫秒

解决方案4: def f(a,N): return np.argsort(a)[::-1][:N] (N = len(a)) 时间:104毫秒

非常感谢快速和非常好的答案!

python performance numpy

19
推荐指数
3
解决办法
2万
查看次数