【问题标题】:missing items from python listspython列表中缺少的项目
【发布时间】:2019-12-05 17:41:48
【问题描述】:

我有两个函数生成两个矩阵,第一个函数生成一些方阵,而第二个函数根据第一个矩阵生成一维矩阵。两个函数都依赖于参数 N,第二个函数矩阵结果应该有一个 (N*2)**2 的矩阵。我的问题是当我使用参数 N 的值大于 4 时,它们总是从第二个开始缺少 10 个元素函数结果。(已删除 OP 函数以创建一个最小问题。请检查编辑以获取详细信息。下面是一个示例函数来演示该问题

def test(N):
        m = []
        for i in range(0,(N*2)):
            for j in range(-1,(N*7),4):
                m.append((i,j))


        return len(m)

N = 4 的示例

test(4)

输出:
64

N = 5 的示例

test(5)

输出:
90

示例 2 中的结果是 90,而应该是 100,谁能帮忙

【问题讨论】:

  • 范围在末尾以下停止一格。会是这个原因吗?
  • 我想过这个,但是对于少数 N 来说它运行顺利
  • 这几乎肯定是相关的。你只看到它高于 4,因为你按 4 计数。例如,如果你做 for j in range(-1,(N*7)+1,4),那么它对 N=5 正常工作,但这并不能解决所有 Ns。
  • 是的,现在它可以工作了,我将范围公式更改为这个范围(-1,(N * 7)+(N-4),4)),现在它工作得很好

标签: python arrays for-loop matrix


【解决方案1】:

您可以轻松检查任一范围会导致多少次迭代:

>>> n = 5
>>> len(range(0, n*2))
10
>>> len(range(-1, n*7, 4))
9

10*9 确实是一共 90 次迭代,向数组中添加了 90 个元素。

我假设您期望内部循环有更多元素,因此您可能对range 如何处理边界感到困惑。快速的解决方案是尝试诸如n*7+1 之类的变体,直到获得正确的行为。

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多