如何在Python中弹出n次列表?

2024-06-16 10:22:06 发布

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

我有一个photo chooser函数,它计算给定目录中的文件数并列出它们的列表。我希望它只返回5个图像url。功能如下:

from os import listdir
from os.path import join, isfile

def choose_photos(account):
    photos = []
    # photos dir
    pd = join('C:\omg\photos', account)
    # of photos
    nop = len([name for name in listdir(location) if isfile(name)]) - 1
    # list of photos
    pl = list(range(0, nop))
    if len(pl) > 5:
        extra = len(pl) - 5
        # How can I pop extra times, so I end up with a list of 5 numbers
    shuffle(pl)
    for p in pl:
        photos.append(join('C:\omg\photos', account, str(p) + '.jpg'))
    return photos

Tags: ofnamefromimportlenosaccountnop
3条回答

我先发几个答案。获取列表的最简单方法是使用slice符号:

pl = pl[:5] # get the first five elements.

如果您真的想从列表中弹出,可以:

while len(pl) > 5:
  pl.pop()

如果您是在随机选择列表中的选项,这可能是最有效的:

import random
random.sample(range(10), 3)

在大多数语言中,pop()从集合中移除并返回最后一个元素。因此,要同时移除并返回n个元素,请执行以下操作:

def getPhotos(num):
    return [pl.pop() for _ in range(0,num)]

因为这是一个列表,所以您可以通过切片来获取最后五个元素:

last_photos = photos[5:]

这将返回一个浅层副本,因此任何列表中的任何编辑都将反映在另一个列表中。如果你不想这样做,你应该先做一个深刻的模仿。

import copy
last_photos = copy.deepcopy(photos)[5:]

编辑:

当然应该是[5:]而不是[:-5] 但如果你真的想“弹出”它5次,这意味着你想要没有最后5个元素的列表。。。

相关问题 更多 >