小编Ver*_*ion的帖子

Python 假设:确保输入列表具有相同的长度

我正在使用假设来测试一个将两个长度相等的列表作为输入的函数。

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)过滤掉太多输入的假设。所以我想产生一个随机正数和使用,作为两者的长度xy。有没有办法做到这一点?

python testing python-hypothesis

8
推荐指数
2
解决办法
1230
查看次数

将 Pandas join 中的列后缀转换为 MultiIndex

我有两个具有(不一定)相同索引和列名的 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 pandas

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

使用for循环在numpy中填充2D矩阵

我是一个试图切换到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)

python matlab numpy

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

重用现有的上下文管理器作为 pytest 固定装置

我有一个多个测试所需的现有上下文管理器。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 fixtures contextmanager pytest

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

字典理解破坏了密钥列表

我正在尝试用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)

python dictionary python-3.x

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

在 Python 中使用 enumerate 迭代到 len(list) - 1

如果我有一个清单

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()在这个循环中使用来完成同样的事情吗?

python for-loop enumeration python-3.x

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

在 numpy 矩阵中查找匹配行

使用 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)出现的行吗?

python numpy python-3.x

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

使用 urllib 更改 URL 的主机名

我想更改 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 中的主机名?

python url urllib urlparse python-3.x

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

检查列表是否仅包含从 1 到 9 的所有数字,没有重复

如果我有一个清单:

[6, 7, 4, 8, 9, 5, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

我想确保从 1 到 9 的每个数字都在列表中,没有重复,也没有其他数字。最好的方法是什么?

python list python-3.x

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

将所有字符存储在字符串中的括号中

我有一个字符串

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)

如何才能做到这一点?

python regex string python-3.x

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

在MATLAB中创建复杂坐标矩阵,无需循环

我正在尝试创建一个复杂坐标矩阵,以便它包含我指定的实数和虚数的所有组合.例如:

    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)

当我使实数和虚数向量变大时,这个循环需要相当长的时间.有没有更快的方法来创建这样的矩阵?

optimization matlab matrix

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

行为因输入对象类型而异的 Python 函数

在 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 的类,并采取相应的行动。

python oop linear-algebra

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

迭代生成器中的相邻对

我想访问生成器中相邻值的重叠对。

如果它是一个列表,我可以使用

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)

有没有办法为发电机做到这一点?

python generator python-3.x

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