我有一些数据看起来像这种格式
2,3,4
3,4,5
5,6,7
我将数组打包为:
with open('house_price_data.txt') as data:
substrings = data.read().split()
array = [map(int, substring.split(',')) for substring in substrings]
我的任务是对集合中的每个数据进行这样的计算:
(2-3)**2 + (3-3)**2 + (5-3)**2
(3-4)**2 + (4-4)**2 + (5-4)**2
我的预期答案是C1 = 5且C2 = 2
我写了这样的代码
for [a for a, b, c in array] in range (0,2):
C1 = (([a for a, b, c in array]) - 3)**2
C2 = (([b for a, b, c in array]) - 4)**2
但它不起作用。出于for循环的目的,我认为它将逐个读取数据2,3,5减去3并逐个平方结果并将总结果相加。那么我该如何改进呢?
其中一部分,我也遇到了这段代码的问题
[a for a, b, c in array]
[b for a, b, c in array]
[c for a, b, c in array]
我需要多次使用此代码调用数组,并在程序中使用数组的a,b和c项,当我在程序错误按摩时有这样的代码来
not enough values to unpack (expected 3, got 0)
如何进行更改?
答案 0 :(得分:0)
如果你有array = [[2,3,4],[3,4,5],[5,6,7]]
,那么你需要a = [2,3,5]
,那就是
a = [x[0] for x in array]
否则,array[0]
为[2,3,4]
,您可以改为
a, b, c = array
解压缩2D阵列。
旁注:您似乎有一个CSV文件,所以我强烈建议您使用Pandas和Numpy进行数值计算
答案 1 :(得分:0)
这个问题不清楚,可能注定要被遗忘,但如果我理解正确,这远非确定,那你就是想做这样的事情。
array = [[2, 3, 5], [3, 4, 5], [5, 6, 7]]
#initialize the variables C1 and C2
C1 = 0
C2 = 0
#iterate the elements of the FIRST list in your list
#so 2,3,5 (I assume you have indicated 2,3,4 by mistake)
for element in array[0]:
C1+=(element-3)**2
#iterate the elements of the SECOND list in your list
#so 3,4,5
for element in array[1]:
C2+=(element-4)**2
print("C1 =", C1)
print("C2 =", C2)
输出:
C1 = 5
C2 = 2
但你的例子含糊不清。也许2,3,5是每个子列表中的第一个元素?在这种情况下,逻辑是相同的。
#iterate the FIRST element in each sublist in your list
for element in array:
C1+=(element[0]-3)**2
如果那是你想做的事情,那么你最好这样做,使用经典循环。列表推导(像[x for x in array if ...]
这样的东西)是高级Python程序员的快捷方式。它们完全相同,但不太清晰,更容易出错。