【问题标题】:Convert nested loop to single loop without if statements将嵌套循环转换为不带 if 语句的单循环
【发布时间】:2023-02-15 22:11:18
【问题描述】:

我有一个嵌套的 for 循环,它访问的元素将修改具有 N+2 行和 M+2 列的数组的元素 arr[1:N+1, 1:M+1]如何将这个嵌套的 for 循环转换为没有任何 if 语句的单个 for 循环?

这是嵌套的 for 循环当前的样子:

N = 2
M = 2
ncols = M+2

for i in range(1, N+1):
  for j in range(1, M+1):
    print(i, j, i*ncols + j)

# Output:
# 1 1 5
# 1 2 6
# 2 1 9
# 2 2 10

这是我的尝试,但您会注意到我没有根据输出中的索引访问数组的正确部分。

for i in range(ncols+1, (N+1) * (M+1)):
    row = i // ncols
    cols = i % ncols
    print(row, col, row*ncols + col)

# Output:
# 1 1 5
# 1 2 6
# 1 3 7
# 2 0 8

【问题讨论】:

  • 如果您想要 C 解决方案,用 C 编写示例并使用 c 标记怎么样?没有适当的标签,人们不太可能找到您的问题。
  • 数组声明是什么样的?为什么从索引 1 而不是索引 0 开始?
  • 你说“N+2行M+2列”应该是4行4列吧?

标签: for-loop optimization


【解决方案1】:

这是我的修复:

N = 2
M = 2

ncols = M+2

#non-nested loop
for i in range(1, N+1):
  for j in range(1, M+1):
    print(i, j, i*ncols + j)

# Output:
# 1 1 5
# 1 2 6
# 2 1 9
# 2 2 10

#nested loop
for k in range(0, N * M):
    i = k // N +1
    j = k % N +1
    print(i, j, i*ncols + j)

# Output:
# 1 1 5
# 1 2 6
# 1 3 7
# 2 0 8

如果您使用其他语言,您可以将 // 翻转为 / 并将输出转换为 int

【讨论】:

  • 不幸的是,OP 只是在您发布前一分钟将整个问题转换为 C。如果你愿意,我可以将他们的编辑回滚回 Python,然后 OP 可以单独询问一个关于 C 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 2018-12-06
  • 2015-10-01
  • 2012-03-12
相关资源
最近更新 更多