小编Dur*_*tta的帖子

迭代Python中多个列表中的所有值组合

给定多个可能变化长度的列表,我想迭代所有值的组合,每个列表中的一个项目.例如:

first = [1, 5, 8]
second = [0.5, 4]
Run Code Online (Sandbox Code Playgroud)

然后我希望输出为:

combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
Run Code Online (Sandbox Code Playgroud)

我想迭代组合列表.我怎么做到这一点?

python iteration

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

在保持网格的同时删除x轴刻度(matplotlib)

我想删除x轴上的刻度线,但保留垂直网格.当我执行以下操作时,我会丢失x轴刻度以及网格.

import matplotlib.pyplot as plt
fig = plt.figure() 
figr = fig.add_subplot(211)
...
figr.axes.get_xaxis().set_visible(False)
figr.xaxsis.grid(True)
Run Code Online (Sandbox Code Playgroud)

如何在使x轴刻度不可见时保留网格?

python matplotlib

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

在pyplot中与三个子图中的两个共享yaxis标签

我有以下代码生成显示的图.

mport matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec
import numpy as np

One = range(1,10)
Two = range(5, 14) 
l = len(One)
fig = plt.figure(figsize=(10,6))
gs = gridspec.GridSpec(3, 1, height_ratios=[5, 3, 3]) 

ax0 = plt.subplot(gs[0])
ax0.bar(range(l), Two)
plt.ylabel("Number of occurrence")

ax1 = plt.subplot(gs[1], sharey=ax0)
ax1.bar(range(l), Two)

ax2 =  plt.subplot(gs[2])
ax2.bar(range(l), One)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我希望ylabel("出现次数")在第一个和第二个图之间共享,也就是说,它应该出现在第一个和第二个图的中间左侧.我怎么做?

python matplotlib

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

为什么python静态/类方法不可调用?

为什么python实例方法可以调用,但静态方法和类方法不可调用?

我做了以下事情:

class Test():
    class_var = 42

    @classmethod 
    def class_method(cls):
        pass 

    @staticmethod
    def static_method():
        pass

    def instance_method(self):
        pass 

for attr, val in vars(Test).items():
    if not attr.startswith("__"):
        print (attr, "is %s callable" % ("" if callable(val) else "NOT"))
Run Code Online (Sandbox Code Playgroud)

结果是:

static_method is NOT callable
instance_method is  callable
class_method is NOT callable
class_var is NOT callable
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这可能是因为实例方法对象可能具有以特定方式(可能__call__)设置的特定属性(非).为什么会出现这种不对称,或者它的用途是什么?

我在学习python检查工具时遇到过这个问题.

评论的其他评论:

注释中链接的SO答案说静态/类方法是描述符,它们是不可调用的.现在我很好奇,你为什么做出描述符不赎回,因为描述符类与特定的属性(之一__get__,__set__,__del___)定义.

python oop methods

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

设置 nobomb 不删除 vim 中的字节顺序标记

我想\xef\xbb\xbf从我的文件中删除标记 (BOM)。这是一个要输入 python 的文本文件,BOM 标记会导致问题。我尝试过:set nobomb,但那些仍然存在。我该如何解决这个问题以及可能是什么导致了这个问题?

更新: 我的文件是通过组合(串联)许多其他文件(使用 obabel 软件)获得的,每个文件都有 BOM。因此, set nobomb可能仅删除新文件开头的 BOM 标记。在这种情况下,如何删除所有 BOM?

python vim byte-order-mark

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

仅调整matplotlib中两个子图之间的距离

我有3个子图(3行1列).我们可以fig.subplots_adjust(hspace=0.2)用来调整子图之间的距离.这将改变所有情况下子图之间的距离.如何在图1(311)和图2(312)以及图2(312)和图3(313)之间有不同的距离?

python matplotlib

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

将负 y 轴转换为正 (matplotlib)

我想为男性和女性的一些参数绘制条形图。我这样做了: 在此处输入图片说明

我想显示上侧(正 y 轴)和下侧(负 x 轴)女性的平均频率。在这种情况下,对于频率,只有幅度重要,符号不重要。为方便起见,我在上侧显示一个,在下侧显示另一个。我可以更改负 y 轴的标签 (-5, -10, ... 此处) 以便它们的大小保持不变但都是正 (5, 10,...) 。现在应该有两个正 y 轴,一个是另一个的镜像。

python matplotlib

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

python字典键视图上的受限制的集合操作

让我们看下面的代码片段:

d = {1:1}
keys = d.keys()

print(keys & {1,2,3})# {1}
d[2] = 2
print(keys & {1,2,3}) # {1,2} # keys() is a view/reference
print({1,2}.issubset({1,2,3})) # True
print(keys.issubset({1,2,3})) # 'dict_keys' object has no attribute 'issubset'
Run Code Online (Sandbox Code Playgroud)

字典视图对象的官方文档中提到:

键视图设置类似,因为它们的条目是唯一且可清除的...然后这些设置操作可用("其他"指的是另一个视图或一组):[&,|,^,^]

如果键设置为类似,为什么它们上的设置操作仅限于这四个中缀操作.例如,为什么不允许使用issupersetissubset不允许无副作用的操作?

python set

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

用方法补丁(装饰器)覆盖类补丁

我在一个类中有几个测试方法,它们对对象使用一种类型的修补,所以我用类装饰器进行了修补。对于另一种方法,我想以不同的方式修补同一个对象。我尝试了以下方法,但是尽管方法本身用不同的补丁装饰,但作为类装饰器制作的补丁仍然有效。我希望方法补丁覆盖类补丁。为什么不是这样?

在这种特殊情况下,我可以删除类补丁并修补个别方法,但这将是重复的。如何实现这种覆盖(方法覆盖类补丁)机制?

from unittest TestCase
from unittest import mock

@mock.patch('my_module.cls.method', mock.Mock(side_effect=RuntimeError('testing'))
class SwitchViewTest(TestCase):

    def test_use_class_patching(self):
        # several other methods like this
        # test code ..

    @mock.patch('my_module.cls.method', mock.Mock(side_effect=RuntimeError('custom'))
    def test_override_class_patching(self):
        # test code ...
Run Code Online (Sandbox Code Playgroud)

python tdd unit-testing python-unittest python-unittest.mock

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

python collections.defaultdict,长度为2的列表

我有一种情况,一个键将有两个值,将在程序期间更新.更conretely,从空字典d开始= {},我希望做一些这样的事情: d[a][0] += 1或者d[a][1] += 1其中一个是在程序运行时,还发现了一个float类型.我可以做一些事情d = defaultdict(list([0,0]))(这会产生错误).我希望字典中的默认值是两个元素的列表.我该怎么做呢?

python defaultdict

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