我有一个整数列表,我想要膨胀以包含当前整数,并将它们的值移动+1和-1。
例如,如果我有:
l1 = [3, 9, 15]
我希望结果是(顺序无关紧要):
l2 = [2, 3, 4, 8, 9, 10, 14, 15, 16]
我可以通过这样做来实现它:
l1 = [3, 9, 15]
l2 = l1[:]
l2.extend([i-1 for i in l1])
l2.extend([i+1 for i in l1])
然而,是否有更短/更有效的方式来执行此操作(如果合适,使用numpy
)?
请注意,我还希望“通胀”能够不对称地工作,并且增加了2个以上的值,例如-3,-2和-1。
答案 0 :(得分:3)
这个怎么样:
l1 = [3, 9, 15]
l2 = [i+j for i in l1 for j in (-1, 0, 1)]
print (l2)
给出:
[2, 3, 4, 8, 9, 10, 14, 15, 16]
答案 1 :(得分:0)
您可以将列表理解与range()
一起使用为:
>>> [item + i for item in l1 for i in range(-1, 2)]
[2, 3, 4, 8, 9, 10, 14, 15, 16]
答案 2 :(得分:0)
numpy就是这样的
value=1
p = np.array([3, 9, 15])
p = np.append(p,[[[i+value,i-value] for i in p]])
输出已排序:
[2, 3, 4, 8, 9, 10, 14, 15, 16]
但你希望价值2显示在例如 3 [1,3,5]或[1,2,3,4,5]中?
如果你想第二个选项是这样的
value=2
p = np.array([3, 9, 15])
p = np.append(p,[[[i+range(1,value+1),i-range(1,value+1)] for i in p]])
输出排序:
[1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17]