我知道我能做到:
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) 我有一个包含20个文件名的列表['file1.txt', 'file2.txt', ...].我想编写一个Python脚本来将这些文件连接成一个新文件.我可以打开每个文件f = open(...),通过调用逐行读取f.readline(),并将每行写入该新文件.它对我来说似乎不是很"优雅",尤其是我必须阅读的部分//逐行写.
在Python中有更"优雅"的方法吗?
在Python3和Python2.6中,我注意到我可以分割两个整数并得到一个浮点数.你如何得到Python2.6的行为?是否有不同的方法来获取int/int = int?
是否可以在python中使用字符串作为数组中的索引?
例如:
myArray = []
myArray["john"] = "johns value"
myArray["jeff"] = "jeffs value"
print myArray["john"]
Run Code Online (Sandbox Code Playgroud) 如何从头开始在C中创建Hashmap?考虑什么参数以及如何测试hashmap有多好?就像在您说哈希映射完成之前需要运行的基准测试用例一样.
我正在玩列表推导以更好地理解它们,我遇到了一些我无法解释的意外输出.我之前没有找到这个问题,但如果是/是/重复的问题,我道歉.
我本质上是在尝试编写一个生成生成器的生成器.使用列表推导的简单生成器如下所示:
(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) 我试图更熟悉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) 在另一个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) 作为稍微复杂的脚本的一部分,我需要告诉服务器运行模拟.通常,我会这样做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秒钟" 让我的命令运行?
如果这是一个重复的问题,我很抱歉,我查找了这些信息,但仍然无法找到它.
是否可以通过非常有效地使用递减顺序的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毫秒
非常感谢快速和非常好的答案!