相关疑难解决方法(0)

是否有列表的短包含功能?

我看到人们正在使用any收集另一个列表来查看列表中是否存在某个项目,但是有一个快速的方法可以做到吗?:

if list.contains(myItem):
    # do something
Run Code Online (Sandbox Code Playgroud)

python collections search contains list

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

检查项目是否在数组/列表中

如果我有一个字符串数组,我可以检查一个字符串是否在数组中而不进行for循环?具体来说,我正在寻找一种方法在一个if语句中这样做,所以像这样:

if [check that item is in array]:
Run Code Online (Sandbox Code Playgroud)

python arrays contains

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

Python中的二进制搜索(二分)

是否有一个库函数在列表/元组上执行二进制搜索并返回项目的位置(如果找到)和'False'(-1,None等),如果没有?

我在bisect模块中找到了函数bisect_left/right ,但即使该项不在列表中,它们仍会返回一个位置.这对于他们的预期用途来说非常好,但我只是想知道一个项目是否在列表中(不想插入任何内容).

我想过使用bisect_left然后检查那个位置的项目是否等于我正在搜索的项目,但这看起来很麻烦(我还需要检查边界是否可以大于我列表中的最大数字).如果有一个更好的方法我想知道它.

编辑为了澄清我需要这个:我知道字典非常适​​合这个,但我试图尽可能降低内存消耗.我的预期用法是一种双向查找表.我在表中有一个值列表,我需要能够根据它们的索引访问这些值.而且如果值不在列表中,我希望能够找到特定值的索引或None.

使用字典是最快的方法,但会(大约)加倍内存需求.

我在问这个问题,认为我可能忽略了Python库中的某些东西.正如Moe建议的那样,我似乎必须编写自己的代码.

python binary-search bisection

170
推荐指数
8
解决办法
17万
查看次数

为什么NaN不等于NaN?

相关的IEEE标准定义了一个数字常量NaN(不是数字),并规定NaN应该比较为不等于它自己.这是为什么?

我熟悉的所有语言都实现了这个规则.但它经常会导致严重的问题,例如当NaN存储在容器中时,NaN存在于正在排序的数据中等时的意外行为等.更不用说,绝大多数程序员都希望任何对象都等于自身(在他们了解NaN之前,令人惊讶的是他们增加了错误和混乱.

IEEE标准经过深思熟虑,因此我确信NaN的比较与其本身相同是很糟糕的.我只是想不通它是什么.

language-agnostic floating-point nan ieee-754

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

如何有效地查找列表中的哪些元素在另一个列表中?

我想知道list_1中包含哪些元素list_2。我需要输出作为布尔值的有序列表。但我想避免for循环,因为两个列表都有超过 200 万个元素。

这就是我所拥有的并且它有效,但它太慢了:

list_1 = [0,0,1,2,0,0]
list_2 = [1,2,3,4,5,6]

booleans = []
for i in list_1:
   booleans.append(i in list_2)

# booleans = [False, False, True, True, False, False]
Run Code Online (Sandbox Code Playgroud)

我可以拆分列表并使用多线程,但如果可能的话,我更喜欢更简单的解决方案。我知道像 sum() 这样的一些函数使用向量运算。我正在寻找类似的东西。

如何让我的代码更加高效?

python for-loop list vectorization

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

为什么dict查找总是比列表查找更好?

我使用字典作为查找表,但我开始怀疑列表是否会更适合我的应用程序 - 查找表中的条目数量不是那么大.我知道列表在引擎盖下使用C数组,这使我得出结论,在列表中只查找几个项目比在字典中更好(访问数组中的一些元素比计算哈希更快).

我决定介绍其他选择,但结果让我感到惊讶.列表查找只有单个元素才能更好!请参见下图(log-log plot):

list vs dict查找时间

所以问题就出现了:为什么列表查找执行得如此糟糕?我错过了什么?

在一个侧面问题上,在大约1000个条目之后,在dict查找时间中引起我注意的其他东西是一个小"不连续".我单独绘制了dict查找时间来显示它.

字典查找时间

ps1我知道数组和散列表的O(n)vs O(1)摊销时间,但通常情况下,迭代数组的少量元素比使用散列表更好.

ps2这是我用来比较字典和列表查找时间的代码:

import timeit

lengths = [2 ** i for i in xrange(15)]

list_time = []
dict_time = []
for l in lengths:
    list_time.append(timeit.timeit('%i in d' % (l/2), 'd=range(%i)' % l))
    dict_time.append(timeit.timeit('%i in d' % (l/2),
                                   'd=dict.fromkeys(range(%i))' % l))
    print l, list_time[-1], dict_time[-1]
Run Code Online (Sandbox Code Playgroud)

ps3使用Python 2.7.13

python optimization performance big-o python-internals

41
推荐指数
2
解决办法
4677
查看次数

Javascript,最快的方式来知道某个值是否在数组中?

可能重复:
JavaScript中的array.contains(obj)

假设我有一个数组= [0,8,5]

知道8是否在这个内部的最快方法是什么...例如:

if(array.contain(8)){
 // return true
}
Run Code Online (Sandbox Code Playgroud)

我发现了这个:检查列表中是否存在值的最快方法(Python)

而这:检测Javascript中的值是否在一组值中的最快方法

但这不能回答我的问题.谢谢.

javascript arrays performance

9
推荐指数
1
解决办法
8170
查看次数

Python - 捕获异常的效率

可能重复:
Python FAQ:"异常有多快?"

我记得读过Python在异常方面实现了"更好地寻求宽恕而非要求许可"的哲学.根据作者的说法,这意味着Python代码应该使用大量的try - except子句,而不是试图提前确定是否要做一些会导致异常的事情.

我刚刚在我的网络应用程序上写了一些try - except子句,其中大部分时间都会在代码运行时引发异常.因此,在这种情况下,提高和捕获异常将是常态.从效率的角度来看这是不是很糟糕?我还记得有人告诉我,捕获一个引发异常会产生很大的性能开销.

使用try - except条款是否会不必要地低效,在这些条款中,您希望几乎所有时间都会引发异常?

这是代码 - 它使用Django ORM来检查将用户与各种第三方社交提供者相关联的对象.

try:
    fb_social_auth = UserSocialAuth.objects.get(user=self, provider='facebook')
    user_dict['facebook_id'] = fb_social_auth.uid
except ObjectDoesNotExist:
    user_dict['facebook_id'] = None

try:
    fs_social_auth = UserSocialAuth.objects.get(user=self, provider='foursquare')
    user_dict['foursquare_id'] = fs_social_auth.uid
except ObjectDoesNotExist:
    user_dict['foursquare_id'] = None

try:
    tw_social_auth = UserSocialAuth.objects.get(user=self, provider='twitter')
    user_dict['twitter_id'] = tw_social_auth.uid
except ObjectDoesNotExist:
    user_dict['twitter_id'] = None
Run Code Online (Sandbox Code Playgroud)

第一个将很少采取例外,因为现在我们正在实施"登录Facebook"作为新用户加入该网站的主要方法.但是,Twitter和Foursquare是可选的,如果他们想要导入朋友或粉丝,我希望大多数人不会.

我愿意接受更好的方法来编写这种逻辑.

python performance try-catch

9
推荐指数
1
解决办法
394
查看次数

按值拆分列表并保留分隔符

我有一个名为的列表list_of_strings,如下所示:

['a', 'b', 'c', 'a', 'd', 'c', 'e']
Run Code Online (Sandbox Code Playgroud)

我想按一个值(在本例中为c)拆分此列表。我也想保留c由此产生的分裂。

所以预期的结果是:

[['a', 'b', 'c'], ['a', 'd', 'c'], ['e']]]
Run Code Online (Sandbox Code Playgroud)

有什么简单的方法可以做到这一点?

python

8
推荐指数
2
解决办法
4415
查看次数

Python断言列表中的所有元素都不是无

我想知道我们是否可以断言列表中的所有元素都不是None,因此 whilea = None会引发错误。

样本清单是[a, b, c]

我已经尝试过了,如果任何一个元素不是,assert [a, b, c] is not None它就会返回,但不会验证所有元素。你能帮忙想一下吗?谢谢!!TrueNone

python assert

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