小编mcl*_*fee的帖子

按最大值获取dict键

我试图得到dict键,它的值在所有dict的值中都是max.我找到了两种方法,都不够优雅.

d= {'a':2,'b':5,'c':3}
# 1st way
print [k for k in d.keys() if d[k] == max(d.values())][0]
# 2nd way
print Counter(d).most_common(1)[0][0]
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

python counter dictionary

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

Python min/max on None类型

我注意到虽然'max'函数在None类型上表现良好:

In [1]: max(None, 1)
Out[1]: 1
Run Code Online (Sandbox Code Playgroud)

'min'函数不返回任何内容:

In [2]: min(None, 1)
In [3]: 
Run Code Online (Sandbox Code Playgroud)

也许是因为min(None,1)没有定义?那么为什么在最大的情况下,它返回数字?没有人像'无限'一样对待?

python min nonetype

11
推荐指数
2
解决办法
9660
查看次数

Python索引在列表切片中超出范围

虽然这段代码会引发indexError:

In [1]: lst = [1, 2, 3]
In [2]: lst[3]
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

使用"超出范围索引"切片列表不会产生任何错误.

In [3]: lst[3:]
Out[3]: []
Run Code Online (Sandbox Code Playgroud)

这种设计的理由是什么?

python list slice

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

python"或"运算符奇怪的行为

一,代码:

>>> False or 'hello'
'hello'
Run Code Online (Sandbox Code Playgroud)

这种令人惊讶的行为让您检查是否x!= None并在一行中检查x值:

>>> x = 10 if randint(0,2)==1 else None
>>> (x or 0) > 0
depend on x value...
Run Code Online (Sandbox Code Playgroud)

说明:"或"这样的函数:( 链接)"如果x为假,则为y,否则为x"

我所知道的语言不允许你这样做.那么,为什么是Python呢?

python boolean operators

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

Python:查找列表字段之间的距离

嗨,我需要计算列表中每个数字对之间的距离,包括最后一个和第一个之间的距离(它是一个圆圈).

天真,我可以这样做:

l = [10,-12,350]
ret = []
for i in range(len(l)-1):
    ret.append(abs(l[i] - l[i+1]))
ret.append(l[-1] - l[0])
print ret

out: [22, 362, 340]
Run Code Online (Sandbox Code Playgroud)

我试过"枚举"这是一个更好的方法:

print [abs(v - (l+[l[0]])[i+1]) for i, v in enumerate(l)]
out: [22, 362, 340]
Run Code Online (Sandbox Code Playgroud)

有更优雅和"pythonic"的方式吗?

python list enumerate

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

numpy有效地计算多项式

我正在尝试使用numpy来评估多项式(3度).我发现通过更简单的python代码来实现它会更有效率.

import numpy as np
import timeit

m = [3,7,1,2]

f = lambda m,x: m[0]*x**3 + m[1]*x**2 + m[2]*x + m[3]
np_poly = np.poly1d(m)
np_polyval = lambda m,x: np.polyval(m,x)
np_pow = lambda m,x: np.power(x,[3,2,1,0]).dot(m)

print 'result={}, timeit={}'.format(f(m,12),timeit.Timer('f(m,12)', 'from __main__   import f,m').timeit(10000))
result=6206, timeit=0.0036780834198

print 'result={}, timeit={}'.format(np_poly(12),timeit.Timer('np_poly(12)', 'from __main__ import np_poly').timeit(10000))
result=6206, timeit=0.180546045303

print 'result={}, timeit={}'.format(np_polyval(m,12),timeit.Timer('np_polyval(m,12)', 'from __main__ import np_polyval,m').timeit(10000))
result=6206, timeit=0.227771043777

print 'result={}, timeit={}'.format(np_pow(m,12),timeit.Timer('np_pow(m,12)', 'from __main__ import np_pow,m').timeit(10000))
result=6206, timeit=0.168987989426
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

numpy中还有另一种评估多项式的​​方法吗?

python performance numpy polynomials

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

sqlalchemy ArgumentError:文本 SQL

将纯文本传递给“order_by”时会引发 ArgumentError。Its 出现在版本 0.9.8 中,但版本 < 0.9.8 或 > 0.9.8 中则不会出现。

q = session.query(Person)
q.order_by('RAND()')
>> ArgumentError: Textual SQL expression 'RAND()' should be explicitly declared as text('RAND()')
Run Code Online (Sandbox Code Playgroud)

问题: 1.有相关的官方文档吗?2. 对于新版本,传递纯文本是一个好的做法,还是用 text() 包装它更好?3. 除 order_by 之外的更多函数是否会引发此错误?

python mysql sqlalchemy

5
推荐指数
0
解决办法
5123
查看次数

使用 agilitypack C# 处理 cookie 和标头

agilitypack 在 html 解析方面对我来说非常出色,但是其他 html 方面呢?agilitypack.HtmlWeb 对象允许访问 cookie 和标头吗?

.net c# html-agility-pack

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

使用或不使用dict.keys()访问Python dict键

通常我dict使用keys()方法访问密钥:

d = {'a':1, 'b':2, 'c':3}

for k in d.keys(): print k
Run Code Online (Sandbox Code Playgroud)

但有时我看到这段代码:

for k in d: print k
Run Code Online (Sandbox Code Playgroud)

这段代码是否正确?安全?

python dictionary loops

4
推荐指数
2
解决办法
785
查看次数

pandas“isin”比 numpy“in1d”慢得多

从效率方面来看,pandas“isin”和numpy“in1d”之间存在巨大差异。经过一些研究,我注意到数据的类型和作为参数传递给“in”方法的值对运行时间有巨大的影响。不管怎样,看起来 numpy 实现受到这个问题的影响要小得多。这里发生了什么?

import timeit
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,10,(10**6),dtype='int8'),columns=['A'])
vals = np.array([5,7],dtype='int64')
f = lambda: df['A'].isin(vals)
g = lambda: pd.np.in1d(df['A'],vals)
print 'pandas:', timeit.timeit(stmt='f()',setup='from __main__ import f',number=10)/10
print 'numpy :', timeit.timeit(stmt='g()',setup='from __main__ import g',number=10)/10
>>
**pandas: 0.0541711091995
numpy : 0.000645089149475**
Run Code Online (Sandbox Code Playgroud)

performance benchmarking numpy pandas

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

python根据与A点的距离在线找到B点

我有线方程,点A和距离,并且需要在线上的距离边缘找到点B。我有2个方程式:

distance = math.sqrt((pt1[0] - pt2[0])**2 + (pt1[1] - pt2[1])**2)
pt2[1] = m*pt2[0] + n
Run Code Online (Sandbox Code Playgroud)

距离pt1,m和n是已知的。

我如何在python中实现此计算?也许有python库已经知道为我做这个了?

python math geometry

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