这是我尝试运行的代码的简化版本,但本质上我们的输入可以被视为它们自己方向上的坐标。我只想让操作--在本例中是求和--在每组“坐标”(内部列表)之间起作用,然后对输入(外部列表)中的所有值通过“for循环”迭代地继续。
据我所知,i和j都在同时变化,我需要输入一个“j”,然后在改变到下一个j之前运行所有可能的“i”值。
注意#不允许使用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的方式。
我的RED输出是c = [2, 4, 6, 5, 6, 7, 8, 10, 12]
我尝试改变for语句的顺序,以及输入i和j的顺序。
据我所知,i和j都在同时变化,我需要输入一个“j”,然后在改变到下一个j之前运行所有可能的“i”值。
产出如下:
# This specific code above gives:
[2, 6, 10, 3, 7, 11, 4, 8, 12]
2条答案
按热度按时间ecfsfe2w1#
我需要输入一个“j”,然后在改变到下一个j之前运行所有可能的“i”值。
这意味着:
for j in ...
必须是外部循环,for i in ...
必须是内部循环。j
是one
中的一个子列表的索引。然后你需要for j in range(len(one)))
,而不是for j in range(len(two))
。(BTW这里的
list()
是不必要的)。i
是two
内部的值的索引。然后你需要for i in range(len(two))
,而不是for i in range(len(one))
。你需要
two[i]
,而不是two[j]
。结果是:
(It交换
i
和j
的含义,然后简单地将one[j][i]
固定为one[i][j]
会更简单,但我想坚持你最初的解释。与其摆弄索引(如您所见,索引很容易出错),更习惯的做法是直接遍历列表的值。然后,您需要
zip
函数来并行遍历one
和two
的一个子列表。pod7payv2#
假设 a 中的子列表与 b 中的子列表大小相同,则:
输出: