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