我想在Python中实现一个自定义列表类作为子类list.list为了获得所有列表操作的完全类型兼容性,我需要从基类重写的最小方法集是什么?
这个问题表明至少__getslice__需要被覆盖.从进一步的研究,也__add__和__mul__是必需的.所以我有这个代码:
class CustomList(list):
def __getslice__(self,i,j):
return CustomList(list.__getslice__(self, i, j))
def __add__(self,other):
return CustomList(list.__add__(self,other))
def __mul__(self,other):
return CustomList(list.__mul__(self,other))
Run Code Online (Sandbox Code Playgroud)
即使没有重写方法,以下语句也可以按预期工作:
l = CustomList((1,2,3))
l.append(4)
l[0] = -1
l[0:2] = CustomList((10,11)) # type(l) is CustomList
Run Code Online (Sandbox Code Playgroud)
这些语句仅适用于上述类定义中的重写方法:
l3 = l + CustomList((4,5,6)) # type(l3) is CustomList
l4 = 3*l # type(l4) is CustomList
l5 = l[0:2] # type(l5) is CustomList
Run Code Online (Sandbox Code Playgroud)
我唯一不知道如何实现的是使扩展切片返回正确的类型:
l6 = l[0:2:2] # type(l6) is list
Run Code Online (Sandbox Code Playgroud)
为了获得CustomList类型,我需要添加到我的类定义中l6 …
我正在脚本中生成matplotlib数字,我可以在有或没有图形显示的情况下交替运行.我希望脚本能够自动调整:通过显示,它应该以交互方式显示数字,而没有显示,它应该只是将它们保存到文件中.
从没有正在运行的X服务器生成matplotlib图的问题的答案,我了解到可以使用Agg后端进行非交互式绘图.
所以我正在尝试使用此代码:
import matplotlib
try:
import matplotlib.pyplot as plt
fig = plt.figure()
havedisplay = True
except:
matplotlib.use("Agg")
import matplotlib.pyplot as plt
fig = plt.figure()
havedisplay = False
# do the plotting
if havedisplay:
plt.show()
else:
fig.savefig("myfig.png")
Run Code Online (Sandbox Code Playgroud)
这在带有显示器的情况下是例外的.但是,如果没有显示,则调用matplotlib.use无效,因为已经选择了显示.很明显我matplotlib.use之前应该打电话import matplotlib.pyplot,但后来我不知道如何测试显示器是否可用.
我也试过使用实验函数matplotlib.switch_backend而不是matplotlib.use,但这会产生RuntimeError.
有人知道如何使上述代码按预期工作,或者可以建议另一种方法来检测显示器是否可用于matplotlib?
我已经在Python中为简单的Markov决策过程Wikipedia实现了值迭代算法.为了保持特定马尔可夫过程的结构(状态,动作,转换,奖励)并迭代它,我使用了以下数据结构:
可用于这些状态的状态和操作的字典:
SA = { 'state A': {' action 1', 'action 2', ..}, ...}
转换概率字典:
T = {('state A', 'action 1'): {'state B': probability}, ...}
奖励词典:
R = {('state A', 'action 1'): {'state B': reward}, ...}.
我的问题是:这是正确的方法吗?MDP最适合的数据结构(在Python中)是什么?
考虑我kwargs在方法中更改dict 的情况:
def print_arg(**kwargs):
print kwargs.pop('key')
Run Code Online (Sandbox Code Playgroud)
如果我pop_arg用这样的字典调用方法:
mydict = {'key':'value'}
print_arg(**mydict)
Run Code Online (Sandbox Code Playgroud)
mydict这个电话会改变吗?
我也对mydict更改或不更改的底层方法调用机制的更详细解释感兴趣.
我一直在寻找一个python模块,它提供了一个具有以下功能的memoize装饰器:
我发现了几个小的代码段用于这个任务,很可能实现一个自己,但我宁愿有一个既定的软件包这一任务.我也发现了incpy,但这似乎不适用于标准的python解释器.
理想情况下,我希望functools.lru_cache在磁盘上加上缓存存储.有人能指点我这个合适的套餐吗?
我有一个2D空间,其中定义了一个函数值(您可以将其视为一个流形).现在我使用contourf绘制了函数值,并将colormap更改为比jet更柔和的东西.到目前为止它看起来很不错.
现在我想在我的空间画一条代表状态的线.使用该plot命令也是可能的.但是我想要一些更多改进:现在有一个隐藏的额外状态(值0 ... 50).我想根据这种隐藏状态改变线条颜色.因此,在某种意义上,将单独的色彩映射应用于由plot例如瀑布图中绘制的线.
这是(或类似的)使用matlab可能吗?
谢谢
我想在满足特定条件的迭代中枚举这些项.我尝试过类似的东西
[(i,j) for i,j in enumerate(range(10)) if (3 < j) and (j < 8)]
Run Code Online (Sandbox Code Playgroud)
(试图枚举4到7之间的数字只是为了一个例子).从这里,我得到了结果
[(4, 4), (5, 5), (6, 6), (7, 7)]
Run Code Online (Sandbox Code Playgroud)
我想得到的是
[(0, 4), (1, 5), (2, 6), (3, 7)]
Run Code Online (Sandbox Code Playgroud)
是否有一种pythonic方式来达到预期的效果?
请注意,在我正在处理的实际问题中,我事先并不知道有多少项满足条件.
我正在尝试使用numpy.nditer进行数组操作,但是没有得到预期的结果.
我的代码是
import numpy as np
arr1 = - np.random.random((2,2))
arr2 = np.random.random((2,2))
arr = np.zeros((2,2))
it = np.nditer([arr1, arr2, arr], [], [['readonly'], ['readonly'], ['writeonly']])
for a1, a2, a in it:
a = a1 if -a1 < a2 else a2
print arr
print it.operands[2]
Run Code Online (Sandbox Code Playgroud)
我得到的所有结果为零均arr和it.operands[2],但我希望无论从价值arr1还是arr2.arr在迭代中为值赋值的正确方法是什么?
哪个正则表达式模式将匹配Python中不包含特定字符的子字符串?例如,我有字符串"abc,5 * de",我想匹配"abc"和"5 * de"作为两个子串,但不是,.
python ×8
colors ×1
decorator ×1
dictionary ×1
immutability ×1
iterable ×1
linux ×1
list ×1
markov ×1
matlab ×1
matplotlib ×1
memoization ×1
numpy ×1
plot ×1
regex ×1
subclass ×1