我正在尝试做一些简单的事情,但是我不明白由此产生的错误。我试过谷歌搜索操作数和广播(python 说这就是我在做什么,我做错了),但这对我没有帮助。我也找不到关于 SO 的答案,但也许我使用了错误的搜索词。
我有一个包含 64 个条目的 64 个子列表的列表。我想创建一个新列表,其中每个子列表的条目都移动到一侧(向前或向后,没关系),然后结束剪辑并用零填充开头,因此它仍然有 64 个条目。我以为我知道该怎么做,但我的解决方案不起作用,我不明白错误。它说我正在广播并且我做错了。但是,我只是做了一些列表理解(这只是 for 循环,对吗?)并将它们粘在一起。
目标:
1 2 3 4 5 1 2 3 4 5
1 2 3 4 5 0 1 2 3 4
1 2 3 4 5 becomes 0 0 1 2 3
1 2 3 4 5 0 0 0 1 2
1 2 3 4 5 0 0 0 0 1
我的尝试:
result = [ [[0 for hh in range(ii)]+originallist[0][jj][0+ii:] for ii in range(64)] for jj in range(64)]
( originallist 后面的额外 [0] 在那里,因为我上面描述的列表实际上是一个母列表的子列表,但在这个例子中我只看一个这样的列表)
结果是:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-51-5261c3ba129a> in <module>()
----> 1 result = [ [[0 for hh in range(ii)]+originallist[0][jj][0+ii:] for ii in range(64)] for jj in range(64)]
<ipython-input-51-5261c3ba129a> in <listcomp>(.0)
----> 1 result = [ [[0 for hh in range(ii)]+originallist[0][jj][0+ii:] for ii in range(64)] for jj in range(64)]
<ipython-input-51-5261c3ba129a> in <listcomp>(.0)
----> 1 result = [ [[0 for hh in range(ii)]+originallist[0][jj][0+ii:] for ii in range(64)] for jj in range(64)]
ValueError: operands could not be broadcast together with shapes (0) (64)