【问题标题】:Python append values to empty list by skipping values in between a listPython通过在列表之间跳过值将值附加到空列表
【发布时间】:2018-04-19 10:54:23
【问题描述】:

只是我想要实现的一个最小示例。

我有一个数组:

array = [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,....,1,2,3,4,5,6,7,8,9,10]

我想遍历这个数组并创建一个如下所示的新数组:

new_array = [1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,....,1,2,3,4,5,6,7,8,9,10]

即遍历数组a,得到第一个值(即1),然后跳过remaining 9,然后得到第一个和第二个值(即1,2),然后跳过remaining 8,依此类推。

我想出的想法是创建indices 并按以下方式使用它:

In [1]: indices = np.arange(1,10,1)
Out[1]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])

new_array = []
for i in array:
    for a,b in zip(indices,range(10)):
        new_array.append(i[0:a]) # here I am including i[0:1], i[0:2] and so on 

所以它循环遍历array 并获取第一个值,然后跳过剩余的 9 个值,然后获取前两个值并跳过剩余的 8 个值,依此类推。

但这似乎不起作用。我怎样才能做到这一点?

【问题讨论】:

  • 你能举个具体的例子吗
  • 您的问题有歧义,例如当我在跳过的第一部分或第二部分到达数组末尾时会发生什么。
  • 以上是最简单的例子。我想从array 得到new_array。我相信我已经解释了arraynew_array之间的区别
  • @shivam: nanbaa,跳过 pannanum nanbaa,第一个值,adhukku aprom 前两个等。当数组结束时,我们停止。
  • 当内部获取所有索引低于外部的项目时,您可以使用范围为 10 的两个 for 循环轻松完成此操作。有关详细信息,请参阅我的答案。

标签: python arrays for-loop indexing indices


【解决方案1】:

如果您不需要所有值(仅通过您的方案)

list = [1,2,3,4,5,6,7,8,9,10] * 10
output = []

skip = 9
i = 0
while skip > 0:
    output.append(list[i])
    i += skip + 1
    skip -= 1
print(list)
print(output)

但是您的“new_array”没有通过您的算法。为什么不:

[1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10] 如果我在跳过9 值后获得第一个1(它具有索引0),我将获得1,然后跳过8 值我将不会获得2

编辑:好的,我现在明白了。这应该有效:

list = [1,2,3,4,5,6,7,8,9,10] * 10
output = []

skip = 9
i = 0
j = 0
add = 1
while skip >= 0:
    newList = list[i:j+1]
    for x in newList:
        output.append(x)
    i += skip + add
    j += skip + add + 1
    add += 1
    skip -= 1
print(output)

【讨论】:

  • 所以...您可以使用两个索引 - ij 并以类似方式执行此操作。
【解决方案2】:

对于一个信号列表,您也可以使用列表扩展:

list = [1,2,3,4,5,6,7,8,9,10]
output = []
i = 1
while i <= 10:
    output.extend(list[0:i])
    i +=1

print output

对于您的列表,您可以将其扩展为:

list = [1,2,3,4,5,6,7,8,9,10]*10

output = []

i = 1
j = 0
k = 1
while k <= 10:
   output.extend(list[j:i])
   j +=10
   k +=1
   i = j+k

print output   

【讨论】:

  • 你能逐步解释一下吗
【解决方案3】:

你能试试这个代码吗?我已经在 python 3 上测试了这段代码,它工作正常。

inp = [1,2,3,4,5,6,7,8,9,10] * 10
inp_len = len(inp);
output = [inp[0]]
skip = 9
limit= skip +2;
pointer = 1;
while skip > 0:
    pointer = pointer+skip;
    if(pointer >inp_len):
        pointer = pointer %inp_len;
    for x in inp[pointer : pointer+limit-skip ]:
        output.append(x);
    pointer= pointer+ limit-skip ;
    skip=skip-1;
print(inp)
print(output)

说明 - 添加默认的第一个元素,然后按以下顺序添加元素。

  • 跳过 9 个元素 = [1, 2]
  • 跳过 8 个元素 = [1, 2, 3]
  • 跳过 7 个元素 = [1, 2, 3, 4]
  • 跳过 6 个元素 = [1, 2, 3, 4, 5]
  • 跳过 5 个元素 = [1, 2, 3, 4, 5, 6]
  • 跳过 4 个元素 = [1, 2, 3, 4, 5, 6, 7]
  • 跳过 3 个元素 = [1, 2, 3, 4, 5, 6, 7, 8]
  • 跳过 2 个元素 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 跳过 1 个元素 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

请用您的输入进行测试。这里我使用的是定义列表。

输入列表 -[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2 , 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7 , 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2 , 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7 , 8, 9, 10]

输出列表 - [1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 1 , 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2 , 3, 4, 5, 6, 7, 8, 9, 10]

【讨论】:

    【解决方案4】:

    怎么样:

    list = [1,2,3,4,5,6,7,8,9,10] * 10;
    output = [];
    
    take = 1;
    index = 0;
    while index < len(list):
        # take the "take" next elements, notice the "index" is not changing.
        for i in range(take):
            output.append(list[index + i]);
        # Skip the remaining values and increase the "take"
        index += 10;
        take += 1;
    print(list)
    print(output)
    

    你也可以这样用两个索引:

    list = [1,2,3,4,5,6,7,8,9,10] * 10;
    output = [];
    
    index = 0;
    for i in range(10):
        for j in range(10):
            if j <= i:
                output.append(list[index + i]);
            index++;
    print(list)
    print(output)
    

    【讨论】:

      【解决方案5】:
      array = [1,2,3,4,5,6,7,8,9,10]*10
      new_array = []
      
      c=j=0
      while c < len(array):
          for i in range(0,j):
              new_array.append(array[i])
              i+=1
          j+=1
          c+=10
      print(new_array)
      

      输出

      [1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      

      【讨论】:

        【解决方案6】:

        这与打印数字从 1 到 10 的三角形并没有太大区别。

        array     = [x for x in range(1,11)]*10 #here 10 means adding same list 10 times
        new_array = []
        for i in range(10):
            new_array += array[10*i:10*i+i+1]
        print(new_array)
        

        希望这会有所帮助!

        需要 0.0005 秒

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-05
          • 2020-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 1970-01-01
          相关资源
          最近更新 更多