重复直到返回值不是非

2024-04-20 01:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个URL列表,其中一些URL可能无效。我想从一个随机选择的网址收集图像。如果URL或图像无效,get_image_from_url函数返回None。因此,我想重复get_image_from_url(random.choice(urls))行,直到它不返回None。因为urls可能是一个很大的列表,所以我不想在之前为完整的列表过滤掉无效的url。我做了以下工作:

image = None
while not image:
    image = ImageNetUtilities.get_image_from_url(random.choice(urls))

return image

我想知道是否有更好的(更具Python性的)方法来实现我的目标。我在用Python3。你知道吗

编辑

正如评论中所建议的,我应该删除我已经选择的任何url。我替换了

image = ImageNetUtilities.get_image_from_url(random.choice(urls))

image = ImageNetUtilities.get_image_from_url(urls.pop(random.randrange(len(urls))))

Tags: 函数from图像imagenoneurl列表get
1条回答
网友
1楼 · 发布于 2024-04-20 01:22:22

1)如果所有URL都无效,则可以避免无休止的循环;2)只测试每个URL一次;3)使用很酷的Python功能,则该版本将是:

image = next(filter(None, map(ImageNetUtilities.get_image_from_url, random.sample(urls, k=len(urls)))))

除了random.sample(urls, k=len(urls)),您还可以事先random.shuffle列出您的列表。你知道吗

要将其分开:

  • ^{}生成列表的随机无序版本
  • ^{}生成一个生成器,它将ImageNetUtilities.get_image_from_url依次应用于每个URL
  • ^{}map生成器中删除所有None
  • ^{}迭代此生成器并返回第一个值,如果没有有效的url,则引发StopIteration异常

相关问题 更多 >