【问题标题】:How to store numbers in chunks from an array and create another array or list? [duplicate]如何将数组中的数字存储在块中并创建另一个数组或列表? [复制]
【发布时间】:2021-09-06 15:51:06
【问题描述】:

我有两个数组 x 和 y:

x = [2 3 1 1 2 5 7 3 6]
y = [0 0 4 2 4 5 8 4 5 6 7 0 5 3 2 8 1 3 1 0 4 2 4 5 4 4 5 6 7 0]

我想创建一个列表“z”,并希望将 y 中的组/数字块存储到 z 中,组的大小由 x 的值定义。

所以 z 将数字存储为

z = [[0,0],[4,2,4],[5],[8],[4,5],[6,7,0,5,3],[2,8,1,3,1,0,4],[2,4,5],[4,4,5,6,7,0]]

我试过这个循环:

h=[]
for j in x:
    h=[[a] for i in range(j) for a in y[i:i+1]]

但它只存储 x 的最后一个值。 另外我不确定这个问题的标题是否适合这个问题。如果令人困惑,任何人都可以编辑。非常感谢。

【问题讨论】:

  • 你需要追加到h,而不是每次循环都重新分配。
  • 这些是列表,而不是数组。
  • h=[h.append(x) for i in range(j) for x in X[i:i+1]] @Barmar 这样吗?
  • 没有。 for j in x: h.append(...)
  • 数组是 numpy.ndarray 还是模块数组?还是您在谈论列表并仅将它们称为数组?在这种情况下,您的数字之间缺少分隔符。如果您使用 numpy,请标记问题。

标签: python arrays list loops


【解决方案1】:

您每次通过循环都重新分配h,所以它最终只得到最后一次迭代的分配。

你应该追加它,而不是分配它。

start = 0
for j in x:
    h.append(y[start:start+j])
    start += j

【讨论】:

    【解决方案2】:

    另一种方法是使用(并像你一样消费)iterator,如下所示:

    x = [2, 3, 1, 1, 2, 5, 7, 3, 6]
    y = [0, 0, 4, 2, 4, 5, 8, 4, 5, 6, 7, 0, 5, 3, 2, 8, 1, 3, 1, 0, 4, 2, 4, 5, 4, 4, 5, 6, 7, 0]
    
    yi = iter(y)
    
    res = [[next(yi) for _ in range(i)] for i in x]
    print(res)  # -> [[0, 0], [4, 2, 4], [5], [8], [4, 5], [6, 7, 0, 5, 3], [2, 8, 1, 3, 1, 0, 4], [2, 4, 5], [4, 4, 5, 6, 7, 0]]
    

    除了您面临的问题之外,作为一般的生活规则,请尝试为您的变量赋予更有意义的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2023-03-23
      • 2018-07-21
      相关资源
      最近更新 更多