N列表大小为n的元素之间的差异。蟒蛇

时间:2013-03-20 15:05:35

标签: python for-loop tuples

假设我有N个大小为n的列表,例如5个大小为3的元组:

p = [[9, 9, 9], [17, 14, 18], [14, 15, 17], [14, 15, 17], [14, 15, 15]]

如何找到列表索引之间的差异,例如索引0:

17-9 = 8
14-17 = -3
14-14 = 0
14-14 = 0

然后索引1:

14-9 = 5
15-14 = 1
15-15 = 0
15-15 = 0

然后索引2,3,4。

我需要代码能够动态地执行此操作,因此我可以随意更改N和n。

非常感谢任何帮助。

编辑:

到目前为止我已尝试过这个:

for i in range(10):
    for j, k in product(range(i+1), repeat=2):
        if j!=k:continue
        else:
            print p[i][j]-p[i-1][j]

此代码适用于大小为2的元组。

5 个答案:

答案 0 :(得分:2)

试试这个:

>>> for x in zip(*p):
    for i in range(len(x)-1):
        print '{0} - {1} = {2}'.format(x[i+1],x[i],x[i+1]-x[i])


17 - 9 = 8
14 - 17 = -3
14 - 14 = 0
14 - 14 = 0
14 - 9 = 5
15 - 14 = 1
15 - 15 = 0
15 - 15 = 0
18 - 9 = 9
17 - 18 = -1
17 - 17 = 0
15 - 17 = -2

答案 1 :(得分:1)

丑陋如同地狱,而不是pythonic,容易出现这个世界的所有错误,但仍然有效(至少应该向你展示你需要的基本逻辑):

In [6]: for i in range(len(p[0])):
            for j in range(1,len(p)):
               print "%d - %d = %d" % (p[j][i], p[j-1][i], p[j][i]-p[j-1][i])
   ...:         
17 - 9 = 8
14 - 17 = -3
14 - 14 = 0
14 - 14 = 0
14 - 9 = 5
15 - 14 = 1
15 - 15 = 0
15 - 15 = 0
18 - 9 = 9
17 - 18 = -1
17 - 17 = 0
15 - 17 = -2

解释

  • 第1行:根据最大列表的第一个元素检查子列表的长度。

  • 第2行:从索引1开始也一样(所以你可以做p [1] -p [0]而不用担心出界问题)

  • 第3行:打印您想要的内容

你可以从这开始修补

答案 2 :(得分:1)

这应该这样做:

for xyz in zip(*p):
   for curr_idx in xrange(len(xyz)-1):
     print xyz[curr_idx+1]-xyz[curr_idx]

答案 3 :(得分:1)

可以使用numpy轻松完成:

p = numpy.array([[9, 9, 9], [17, 14, 18], [14, 15, 17], [14, 15, 17], [14, 15, 15]])
numpy.diff(p.T)

答案 4 :(得分:1)

试试这个

p = ((9, 9, 9), (17, 14, 18), (14, 15, 17), (14, 15, 17), (14, 15, 15))
index=0
for d in range(1,len(p)):
    print "p["+str(d)+"]["+str(index)+"]-p["+str(d)+"]["+str(index)+"]=",
    print p[d][index]-p[d-1][index]

输出

p[1][0]-p[1][0]= 8
p[2][0]-p[2][0]= -3
p[3][0]-p[3][0]= 0
p[4][0]-p[4][0]= 0