【问题标题】:Facing an IndexError for rotating a list面临旋转列表的 IndexError
【发布时间】:2022-01-09 20:38:14
【问题描述】:

我刚刚开始编程并开始解决问题。在实践过程中,我遇到了这个问题,无法理解为什么我的代码不起作用。 所以任务是循环旋转由N个元素组成的数组,顺时针旋转K。

示例 1: 5——N值

{10, 20, 30, 40, 50} — Arr 的元素[ ]

2——K的值

输出: 40 50 10 20 30

我试图通过这个 Python 3 代码解决它:

Arr=[]
Arr2=[]
N=int(input("Enter the number of elements:"))
k=int(input())
if (k>N):
  k=k%N

for i in range (0,N):
  a=input()
  Arr.append(a)

for i in range (0,N):
  if ((i+k)<N):
    Arr2[i+k]=Arr[I]
else:
    Arr2[i+k-N]=Arr[I]
print (Arr2)

它显示 arr2[i+k] 的 IndexError,即使它不应该进入该索引,因为存在条件 (i+k。 请有人可以向我解释一下吗?谢谢

【问题讨论】:

  • 你可以使用多个循环吗?我会将元素从 K 追加到 N,然后从 0 到 K 追加到新列表中。你的Arr2 是空的,所以没有(i+k)th 索引。
  • 使用 (i+k)%N 无论 i+k 的值是多少,这将确保您保持在界限内
  • 一种更简单的方法是使用a[k+1:] + a[:k+1] 剪切和缝合列表,或者使用collections.deque 并仅使用其rotate 方法。

标签: python arrays list


【解决方案1】:

实际上 Arr2 没有任何元素。因此,如果给定索引处没有任何内容,则无法为其赋值。

Arr2[i+k]=Arr[I]

这里得在Arr2中定义i+k索引。

如果它对你有用,你试试这个,但这是临时解决方案,不是完美的方法。

Arr2 = []

for i in range(1000):
  Arr2.append(0)

print(len(a))

您可以更改范围函数的内部。我无法得到您对此的数学表示,但您可以使用问题的最大索引公式更改该部分。

【讨论】:

    【解决方案2】:

    您必须首先将 Arr2 定义为具有固定大小的列表。像这样的:

    Arr2 = [0]*N
    

    这给你一个 Arr2 的输出是:

    [0, 0, 0, 0, 0]
    

    然后,包含您的最终 sn-p 代码是安全的:

    for i in range (0,N):
      if ((i+k)<N):
        Arr2[i+k]=Arr[i]
    else:
        Arr2[i+k-N]=Arr[i]
    print (Arr2)
    

    【讨论】:

    • 谢谢,成功了
    • 您能接受我的回答吗?(勾选为绿色)
    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 2021-12-16
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多