我正在使用假设来测试一个将两个长度相等的列表作为输入的函数。
import hypothesis.strategies as st
from hypothesis import assume, given
@given(st.lists(ints, min_size=1),
st.lists(ints, min_size=1),
)
def test_my_func(x, y):
assume(len(x) == len(y))
# Assertions
Run Code Online (Sandbox Code Playgroud)
这给了我错误信息:
FailedHealthCheck:看起来您的策略正在过滤掉大量数据。健康检查发现了 50 个过滤的示例,但只有 4 个很好的示例。
len(x) == len(y)过滤掉太多输入的假设。所以我想产生一个随机正数和使用,作为两者的长度x和y。有没有办法做到这一点?
我有两个具有(不一定)相同索引和列名的 Pandas DataFrame。
>>> df_L = pd.DataFrame({'X': [1, 3],
'Y': [5, 7]})
>>> df_R = pd.DataFrame({'X': [2, 4],
'Y': [6, 8]})
Run Code Online (Sandbox Code Playgroud)
我可以将它们连接在一起并分配后缀。
>>> df_L.join(df_R, lsuffix='_L', rsuffix='_R')
X_L Y_L X_R Y_R
0 1 5 2 6
1 3 7 4 8
Run Code Online (Sandbox Code Playgroud)
但我想要的是在“X”和“Y”下制作“L”和“R”子列。
所需的 DataFrame 如下所示:
>>> pd.DataFrame(columns=pd.MultiIndex.from_product([['X', 'Y'], ['L', 'R']]),
data=[[1, 5, 2, 6],
[3, 7, 4, 8]])
X Y
L R L R
0 1 5 2 6
1 3 7 4 8
Run Code Online (Sandbox Code Playgroud)
有没有办法可以组合两个原始数据帧来获得所需的数据帧?
我是一个试图切换到Python的Matlab用户.
使用Numpy,如何填充for循环内的矩阵?
例如,矩阵有2列,循环的每次迭代都会for添加一行新数据.
在Matlab中,这将是:
n = 100;
matrix = nan(n,2); % Pre-allocate matrix
for i = 1:n
matrix(i,:) = [3*i, i^2];
end
Run Code Online (Sandbox Code Playgroud) 我有一个多个测试所需的现有上下文管理器。with我认为最好从这个上下文管理器中制作一个固定装置,并用@pytest.mark.usefixtures("my_fixture").
我可以将上下文管理器重新实现为固定装置,但这似乎是重复的代码。所以我想在新的装置中引用原始的上下文管理器。
这就是我所拥有的:
import my_context_manager
@pytest.fixture
def my_fixture(arg1, arg2):
with my_context_manager(arg1, arg2) as c:
yield c
Run Code Online (Sandbox Code Playgroud)
这是将现有上下文管理器转换为固定装置的适当方法吗?
我应该提到,我知道contextlib.ContextDecorator编写一个可以用作装饰器的上下文管理器。但我的上下文管理器需要参数,而当它们出现在像@my_context_decorator(arg1, arg2).
我正在尝试用Python实现排名投票系统.我有这个代码:
import numpy as np
import itertools
candidates = ['Bob', 'Alice', 'Jim', 'Sarah', 'Paul', 'Jordan']
votes = np.matrix(
'1 2 5 3 4 6;' \
'1 2 3 4 5 6;' \
'5 1 2 4 3 6;' \
'6 2 1 3 4 5;' \
'4 3 2 1 5 7'
)
pairs = itertools.combinations(candidates, 2) # All pairs of candidates
d = dict.fromkeys(pairs, 0)
for pair in pairs:
print(pair)
Run Code Online (Sandbox Code Playgroud)
字典是:
d
=> {('Paul', 'Jordan'): 0, ('Alice', 'Sarah'): 0, …Run Code Online (Sandbox Code Playgroud) 如果我有一个清单
A = [5, 2, 7, 4, 6, 1, 3, 2, 6, 19, 2, 6]
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码遍历除最后一个之外的所有元素:
for i in range(len(A) - 1):
pass
Run Code Online (Sandbox Code Playgroud)
我可以enumerate()在这个循环中使用来完成同样的事情吗?
使用 numpy,我有一个名为 的矩阵points。
points
=> matrix([[0, 2],
[0, 0],
[1, 3],
[4, 6],
[0, 7],
[0, 3]])
Run Code Online (Sandbox Code Playgroud)
如果我有 tuple (1, 3),我想找到与这些数字匹配的行points(在本例中,行索引为 2)。
我尝试使用 np.where:
np.where(points == (1, 3))
=> (array([2, 2, 5]), array([0, 1, 1]))
Run Code Online (Sandbox Code Playgroud)
这个输出的意义是什么?它可以用来查找(1, 3)出现的行吗?
我想更改 URL 的主机名。
>>> import urllib
>>> url = "https://foo.bar.com:9300/hello"
>>> parsed = urllib.parse.urlparse(url)
>>> parsed
ParseResult(scheme='https', netloc='foo.bar.com:9300', path='/hello', params='', query='', fragment='')
Run Code Online (Sandbox Code Playgroud)
因为parsed是namedtuple,所以scheme可以替换:
>>> parsed_replaced = parsed._replace(scheme='http')
>>> urllib.parse.urlunparse(parsed_replaced)
'http://foo.bar.com:9300/hello'
Run Code Online (Sandbox Code Playgroud)
该parsed对象还有一个主机名属性:
>>> parsed.hostname
'foo.bar.com'
Run Code Online (Sandbox Code Playgroud)
但它不是namedtuple中的字段之一,所以不能像scheme那样被替换。
有没有办法只替换 URL 中的主机名?
如果我有一个清单:
[6, 7, 4, 8, 9, 5, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)
我想确保从 1 到 9 的每个数字都在列表中,没有重复,也没有其他数字。最好的方法是什么?
我有一个字符串
statement = 'P ? (Q ? R) ? (P ? Q) ? (P ? R)'
Run Code Online (Sandbox Code Playgroud)
我想存储括号内的每个字符串,如下所示:
['Q ? R', 'P ? Q', 'P ? R']
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
我正在尝试创建一个复杂坐标矩阵,以便它包含我指定的实数和虚数的所有组合.例如:
Re = 0:0.5:1; % Real numbers
Im = 0:0.5:1; % Imaginary numbers
C = zeros(length(Re),length(Im)); % Pre-allocate matrix
for i = 1:length(Re)
for j = 1:length(Im)
C(i,j) = complex(Re(i),Im(j)); % Real part + Imaginary part
end
end
Run Code Online (Sandbox Code Playgroud)
结果是:
Re =
0 0.5000 1.0000
Im =
0 0.5000 1.0000
C =
0.0000 + 0.0000i 0.0000 + 0.5000i 0.0000 + 1.0000i
0.5000 + 0.0000i 0.5000 + 0.5000i 0.5000 + 1.0000i
1.0000 + 0.0000i 1.0000 + 0.5000i 1.0000 + 1.0000i
Run Code Online (Sandbox Code Playgroud)
当我使实数和虚数向量变大时,这个循环需要相当长的时间.有没有更快的方法来创建这样的矩阵?
在 Python 中,我可以编写一个将对象作为输入并根据对象的类型执行不同计算的函数吗?
例如,假设我有两个类:“circle”和“line”。我定义了一个具有半径和中心位置的圆形对象 A,以及一个具有不同半径和中心位置的圆形对象 B。然后我定义一个带有方向向量和沿线的点的线对象 C。
我想编写一个计算交集的函数:
def intersect(obj1,obj2):
# Returns intersection of two geometric entities
Run Code Online (Sandbox Code Playgroud)
如果我输入两个圆 A 和 B,我希望函数返回 A 和 B 的交点。但是如果我输入圆 A 和线 C,我希望输出是线所在的点(如果有)穿过圆圈。所以 intersect(obj1,obj2) 需要以某种方式读取 obj1 和 obj2 的类,并采取相应的行动。
我想访问生成器中相邻值的重叠对。
如果它是一个列表,我可以使用
a = [5, 7, 11, 4, 5]
for v, w in zip(a[:-1], a[1:]):
print [v, w]
Run Code Online (Sandbox Code Playgroud)
这是来自这个问题。
但是当我尝试对生成器执行相同操作时,出现错误
TypeError: 'generator' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
有没有办法为发电机做到这一点?