相关疑难解决方法(0)

如何从Python字典中删除密钥?

当我试图从字典中删除一个键时,我写道:

if 'key' in myDict:
    del myDict['key']
Run Code Online (Sandbox Code Playgroud)

有这样一种方式吗?

python dictionary unset data-structures

1539
推荐指数
12
解决办法
129万
查看次数

如何基于参数类型重载__init__方法?

假设我有一个类,其成员名为data,这是一个列表.

我希望能够使用例如文件名(包含初始化列表的数据)或实际列表来初始化类.

你这样做的技巧是什么?

你只是看看类型__class__吗?

我可能会缺少一些技巧吗?

我已经习惯了C++,其中按参数类型重载很容易.

python constructor operator-overloading

297
推荐指数
5
解决办法
15万
查看次数

检查给定键是否已存在于字典中并递增

给定一个字典,如何确定该字典中的给定键是否已设置为非None值?

即,我想这样做:

my_dict = {}

if (my_dict[key] != None):
  my_dict[key] = 1
else:
  my_dict[key] += 1
Run Code Online (Sandbox Code Playgroud)

即,我想增加值,如果已经存在,或者将其设置为1.

python dictionary

283
推荐指数
10
解决办法
34万
查看次数

应该尝试......赶上环路内外?

我有一个看起来像这样的循环:

for (int i = 0; i < max; i++) {
    String myString = ...;
    float myNum = Float.parseFloat(myString);
    myFloats[i] = myNum;
}
Run Code Online (Sandbox Code Playgroud)

这是方法的主要内容,其唯一目的是返回浮点数组.我希望这个方法null在出现错误时返回,所以我将循环放在一个try...catch块中,如下所示:

try {
    for (int i = 0; i < max; i++) {
        String myString = ...;
        float myNum = Float.parseFloat(myString);
        myFloats[i] = myNum;
    }
} catch (NumberFormatException ex) {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

但后来我还想把try...catch块放在循环中,如下所示:

for (int i = 0; i < max; i++) {
    String myString = ...;
    try {
        float …
Run Code Online (Sandbox Code Playgroud)

java performance loops try-catch

175
推荐指数
6
解决办法
9万
查看次数

在python中使用try vs if

在测试变量有值时,是否有理由决定使用哪一个try或哪些if结构?

例如,有一个函数返回列表或不返回值.我想在处理之前检查结果.以下哪一项更可取,为什么?

result = function();
if (result):
    for r in result:
        #process items
Run Code Online (Sandbox Code Playgroud)

要么

result = function();
try:
    for r in result:
        #process items
except TypeError:
    pass;
Run Code Online (Sandbox Code Playgroud)

相关讨论:

检查Python中的成员是否存在

python

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

用于Python的list.index()函数,在没有找到任何内容时不会抛出异常

list.index(x)如果该项不存在,Python会抛出异常.有没有更好的方法来做到这一点,不需要处理异常?

python

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

在列表/数组索引处获取值,如果在Python中超出范围,则获取"无"

是否有清晰的方法来获取列表索引的值,或者None索引是否在Python中的范围或范围?

显而易见的方法是:

if len(the_list) > i:
    return the_list[i]
else:
    return None
Run Code Online (Sandbox Code Playgroud)

但是,详细程度会降低代码的可读性.是否有可以替代使用的干净,简单的单线程?

python

38
推荐指数
7
解决办法
3万
查看次数

如果pandas dataframe.loc位置不存在,则返回default

我发现在尝试引用它之前,我经常需要检查数据框中是否存在列或行.例如,我最终添加了许多代码,如:

if 'mycol' in df.columns and 'myindex' in df.index: x = df.loc[myindex, mycol]
else: x = mydefault
Run Code Online (Sandbox Code Playgroud)

有没有办法更好地做到这一点?例如,在我可以做的任意对象上x = getattr(anobject, 'id', default)- 在熊猫中有类似的东西吗?真的有办法实现我正在做的更优雅吗?

python pandas

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

Python中的异常处理是如何实现的?

这个问题要求解释如何在各种语言中实现异常处理,但它没有收到任何 Python 响应。

我对 Python 特别感兴趣,因为 Python 以某种方式“鼓励”通过EAFP 原理抛出和捕获异常。

我从其他 SO 答案中了解到,如果预计很少引发异常,try/catch 块比 if/else 语句便宜,并且调用深度很重要,因为填充堆栈跟踪很昂贵。这可能主要适用于所有编程语言。

但是,python 的特别之处在于 EAFP 原则的高优先级。因此,python 异常是如何在参考实现 (CPython) 中内部实现的?

python error-handling performance exception python-internals

10
推荐指数
2
解决办法
500
查看次数

其他选项而不是使用try-except

当文本文件中的第2行具有"nope"时,它将忽略该行并继续下一行.是否有另一种方法来写这个没有使用尝试,除了?我可以使用if else语句来执行此操作吗?

文本文件示例:

0 1 
0 2 nope
1 3 
2 5 nope
Run Code Online (Sandbox Code Playgroud)

码:

e = open('e.txt')
alist = []
for line in e:
    start = int(line.split()[0])
    target = int(line.split()[1])
    try:
        if line.split()[2] == 'nope':
            continue
    except IndexError:
        alist.append([start, target])
Run Code Online (Sandbox Code Playgroud)

python file filter try-except

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

在满足条件后避免使用IF语句

我在循环内部进行了一次分割操作,重复多次.碰巧在前几次通过循环(或多或少的前10个循环)中,除数为零.一旦获得值,就不再可能出现div by zero错误.

我有一个if条件来测试除数值,以避免div为零,但我想知道有一个性能影响,评估这if将对后续循环中的每次运行有所影响,特别是因为我知道它已经没用了.

该如何编码?在Python?

python performance if-statement

5
推荐指数
2
解决办法
1272
查看次数

在 Python 中确定嵌套元组的嵌套级别的简单方法

t有没有一种简单的方法来确定(表示重组二项式树)的嵌套级别(不依赖Python的递归限制) ?

t = (4, (3, 5, (2, 4, 6, (1, 3, 5, 7))))
Run Code Online (Sandbox Code Playgroud)

请注意,如果没有 的深度的先验知识t,例程可能会面临由 设定sys.setrecursionlimit(n)和查看的递归限制sys.getrecursionlimit()。尽管如此,事先将递归限制设置得非常高可能还不够,从而产生错误

`RecursionError: maximum recursion depth exceeded while calling a Python object`. 
Run Code Online (Sandbox Code Playgroud)

下面生成一个更大(更深)的t

t = tuple(tuple(range(k)) for k in range(1,200))`
Run Code Online (Sandbox Code Playgroud)

我想这些可能会起作用(还没有弄清楚细节):

  • 可以转换t为字符串并计算左括号的数量
  • 如果展平元组的大小为 $N$,则深度的大小为 $n(n+1)/2=N$ 的正二次根,即 $n=(-1+\sqrt(1+8N)) /2$
  • 迭代地剥离(并计数)外部容器,直到嵌套最深
  • 还有其他人吗?

PS 有什么想法为什么内联 TeX 在我的问题中没有渲染吗?测试:$N$

python algorithm recursion nested python-3.x

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