【问题标题】:Add shifted integers to list将移位整数添加到列表
【发布时间】:2016-10-09 14:03:17
【问题描述】:

我有一个整数列表,我想对它进行扩充以包含当前整数以及它们的值分别移动了 +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。

【问题讨论】:

  • 您的操作方式没有任何问题,除非在顺序不相关时我永远不会使用列表。 Set 在这里是正确的数据类型。
  • @zvone,你为什么要用一套?
  • @PadraicCunningham 因为 list 是一个有序的容器。这里不清楚数据的目的是什么,但是如果 OP 不关心顺序,那么可以合理地假设容器稍后将以一种使集合更合适的方式被搜索。我也有一种感觉,结果不欢迎重复。

标签: python list python-3.x numpy


【解决方案1】:

这个怎么样:

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]

【讨论】:

    【解决方案2】:

    您可以将列表推导与range() 一起使用:

    >>> [item + i for item in l1 for i in range(-1, 2)]
    [2, 3, 4, 8, 9, 10, 14, 15, 16]
    

    【讨论】:

      【解决方案3】:

      用 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]
      

      但您希望在 3 [1,3,5] 或 [1,2,3,4,5] 中显示 2 值?

      如果你想要第二个选项是这样的

      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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        • 2019-07-06
        • 1970-01-01
        • 2020-07-18
        • 1970-01-01
        • 2011-06-06
        • 2014-07-31
        相关资源
        最近更新 更多