Python 中的列表列表 - 将每个内部输入列表视为迭代数学函数的坐标

lists of lists in python - treating each internal list of inputs as coordinates iterating mathematical functions

提问人:Mozy 提问时间:10/7/2023 更新时间:10/7/2023 访问量:38

问:

这是我尝试运行的代码的简化版本,但本质上我们的输入可以被视为各自方向的坐标。我只希望操作(在本例中为总和)在每组“坐标”(内部列表)之间起作用,然后继续迭代地通过输入(外部列表)中所有值的“for循环”。

据我所知,i 和 j 都在同时变化,我需要输入一个“j”,然后遍历所有可能的“i”值,然后再更改为下一个 j。

注意 ### 不允许像 numpy 或 pandas 这样的外部包!!

这是我一直在使用的代码

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [1, 2, 3]
c = []


def summation(one, two):
    for i in list(range(len(one))):
        for j in  list(range(len(two))):
            summ = one[j][i] + two[j]
            c.append(summ)
    print(c)
    
summation(a, b)

我发现问题在于函数遍历索引 i 和 j 的方式。

我想要的输出是c = [2, 4, 6, 5, 6, 7, 8, 10, 12]

我尝试更改 for 语句的顺序,以及输入 i 和 j 的顺序。

据我所知,i 和 j 都在同时变化,我需要输入一个“j”,然后遍历所有可能的“i”值,然后再更改为下一个 j。

产出如下:

# This specific code above gives:
[2, 6, 10, 3, 7, 11, 4, 8, 12]
python-3.x 列表 for 循环

评论


答:

0赞 Codist 10/7/2023 #1

假设 a 中的子列表都与 b 大小相同,则:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [1, 2, 3]

def summation(a, b):
    r = []
    for _a in a:
        r.extend([x+y for x, y in zip(_a, b)])
    return r

print(summation(a, b))

输出:

[2, 4, 6, 5, 7, 9, 8, 10, 12]
1赞 mkrieger1 10/7/2023 #2

我需要输入一个“j”,然后遍历所有可能的“i”值,然后再更改为下一个 j。

这意味着:

  • for j in ...必须是外部循环,并且必须是内部循环。for i in ...

  • j是 里面的子列表之一的索引。那么你需要,而不是。onefor j in range(len(one)))for j in range(len(two))

    (顺便说一句,这里是不必要的)。list()

  • i是 里面的值的索引。那么你需要,而不是。twofor i in range(len(two))for i in range(len(one))

    而你需要的是,而不是。two[i]two[j]

  • 如果进行了这些更改,则需要交换两个循环。

结果是:

for j in range(len(one)):
    for i in range(len(two)):
        summ = one[j][i] + two[i]

(交换 和 的含义然后简单地固定为 会更简单,但我想坚持你原来的解释。ijone[j][i]one[i][j]

与其摆弄索引(正如你所看到的,这很容易出错),不如直接遍历列表的值。然后,您需要该函数来迭代 和 并行的子列表之一。ziponetwo

for sub_one in one:
    for x, y in zip(sub_one, two):
        summ = x + y