【问题标题】:Append function cannot exit for-loop追加函数不能退出for循环
【发布时间】:2020-02-20 20:26:43
【问题描述】:

我想追加文件,但 Jupiter notebook 只是说文件正在运行,但没有给出错误代码,也没有给出输出。 当我尝试停止笔记本时,它会崩溃。这是我的笔记本问题还是功能问题?

我已经在非常简单的代码上尝试了我的代码,例如:

x = [1, 2, 3, 4, 5]

for i in x:
    x.append(i)
print(x)

...但从未给出输出。

这是我的实际代码:

jpgfiles = [f for f in glob.glob(path + "**/*.jpg", recursive=True)]
pngfiles = [f for f in glob.glob(path + "**/*.png", recursive=True)]

for j in jpgfiles:
    jpgfiles.append(j)
    #print(jpgfiles)

for p in pngfiles:
    pngfiles.append(p)
    #print(pngfiles)

all_files = jpg.files + png.files
#print(all_files)

我想知道这是否是代码问题的原因是因为我不知道我是否将文件困在某个无限循环中或什么的? 应该注意的是,真正复杂的代码的其他部分仍然有效!只是当我来到这个函数时,它永远不会停止运行......

【问题讨论】:

  • 您实际上陷入了无限循环 - 您将文件名附加到您正在迭代的列表的末尾。你为什么要这样做?您已经将它们列在列表中。
  • 跳过两个循环并以all_files = jpgfiles + pngfiles结束
  • 这两个循环实际上应该做什么?

标签: python for-loop jupyter-notebook append


【解决方案1】:

您可以像这样合并两个列表:

jpgfiles = [f for f in glob.glob(path + "**/*.jpg", recursive=True)]
pngfiles = [f for f in glob.glob(path + "**/*.png", recursive=True)]

all_files = [*jpgfiles, *pngfiles]
print(all_files)

【讨论】:

    【解决方案2】:

    如果你想添加

    print(x)
    

    对于您的 for 循环,您会看到,您创建了一个无限循环。 您正在增加您正在处理的数组,同时循环遍历数组本身。这通常是非常糟糕的做法。您应该克隆数组并将第一个数组中的元素添加到第二个数组中,同时循环遍历第一个数组。

    【讨论】:

    • 是的,你是对的,谢谢。我现在意识到我需要将它附加到一个新数组中。我创建了一个名为 file = [] 的空变量,然后使用了 file.append(p) !
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    相关资源
    最近更新 更多