提问人:Mozy 提问时间:10/7/2023 更新时间:10/7/2023 访问量:38
Python 中的列表列表 - 将每个内部输入列表视为迭代数学函数的坐标
lists of lists in python - treating each internal list of inputs as coordinates iterating mathematical functions
问:
这是我尝试运行的代码的简化版本,但本质上我们的输入可以被视为各自方向的坐标。我只希望操作(在本例中为总和)在每组“坐标”(内部列表)之间起作用,然后继续迭代地通过输入(外部列表)中所有值的“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]
答:
假设 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]
我需要输入一个“j”,然后遍历所有可能的“i”值,然后再更改为下一个 j。
这意味着:
for j in ...
必须是外部循环,并且必须是内部循环。for i in ...
j
是 里面的子列表之一的索引。那么你需要,而不是。one
for j in range(len(one)))
for j in range(len(two))
(顺便说一句,这里是不必要的)。
list()
i
是 里面的值的索引。那么你需要,而不是。two
for 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]
(交换 和 的含义然后简单地固定为 会更简单,但我想坚持你原来的解释。i
j
one[j][i]
one[i][j]
与其摆弄索引(正如你所看到的,这很容易出错),不如直接遍历列表的值。然后,您需要该函数来迭代 和 并行的子列表之一。zip
one
two
for sub_one in one:
for x, y in zip(sub_one, two):
summ = x + y
评论