我试图得到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)
有更好的方法吗?
我注意到虽然'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)没有定义?那么为什么在最大的情况下,它返回数字?没有人像'无限'一样对待?
虽然这段代码会引发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)
这种设计的理由是什么?
一,代码:
>>> 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呢?
嗨,我需要计算列表中每个数字对之间的距离,包括最后一个和第一个之间的距离(它是一个圆圈).
天真,我可以这样做:
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"的方式吗?
我正在尝试使用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中还有另一种评估多项式的方法吗?
将纯文本传递给“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 之外的更多函数是否会引发此错误?
agilitypack 在 html 解析方面对我来说非常出色,但是其他 html 方面呢?agilitypack.HtmlWeb 对象允许访问 cookie 和标头吗?
通常我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)
这段代码是否正确?安全?
从效率方面来看,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) 我有线方程,点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 ×9
dictionary ×2
list ×2
numpy ×2
performance ×2
.net ×1
benchmarking ×1
boolean ×1
c# ×1
counter ×1
enumerate ×1
geometry ×1
loops ×1
math ×1
min ×1
mysql ×1
nonetype ×1
operators ×1
pandas ×1
polynomials ×1
slice ×1
sqlalchemy ×1