-1

假设我有 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 的元组。

4

5 回答 5

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
于 2013-03-20T15:22:38.533 回答
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 行:打印您想要的内容

你可以从这个开始修补

于 2013-03-20T15:14:54.363 回答
1

这应该这样做:

for xyz in zip(*p):
   for curr_idx in xrange(len(xyz)-1):
     print xyz[curr_idx+1]-xyz[curr_idx]
于 2013-03-20T15:16:28.857 回答
1

使用numpy可以轻松完成:

p = numpy.array([[9, 9, 9], [17, 14, 18], [14, 15, 17], [14, 15, 17], [14, 15, 15]])
numpy.diff(p.T)
于 2013-03-20T15:17:51.120 回答
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
于 2013-03-20T15:21:29.890 回答