用Python

时间:2017-02-25 16:34:12

标签: python arrays

我有一些数据看起来像这种格式

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)

如何进行更改?

2 个答案:

答案 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程序员的快捷方式。它们完全相同,但不太清晰,更容易出错。