6

特定のディレクトリ内のファイルの数を数え、それらのリストを作成する写真選択機能があります。画像の URL を 5 つだけ返すようにします。関数は次のとおりです。

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
4

4 に答える 4

9

先に進み、いくつかの回答を投稿します。リストの一部を取得する最も簡単な方法は、slice表記法を使用することです。

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

リストから本当にポップしたい場合、これは機能します:

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

そのリストから選択肢をランダムに選択したい場合は、おそらくこれが最も効果的です。

import random
random.sample(range(10), 3)
于 2012-08-20T15:42:23.047 に答える
3

これはリストなので、スライスして最後の 5 つの要素を取得できます。

last_photos = photos[5:]

これは浅いコピーを返すため、いずれかのリストの編集は他のリストにも反映されます。この動作が望ましくない場合は、最初にディープ コピーを作成する必要があります。

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

編集:

もちろん、[:-5] ではなく [5:] である必要がありますが、実際に 5 回「ポップ」したい場合は、最後の 5 要素のないリストが必要であることを意味します...

于 2012-08-20T15:40:56.630 に答える