Повторное использование элементов строки Python

Суть программы вывести окно с фоном, на котором будут падать листья, как сделать так, чтобы не пришлось добавлять новые листья в список pics, т.е. использовать уже добавленные листья в нужном количестве. Т.е. я добавил три листа, и выводится три, а я хочу добавить три листа, и вывести 20, используя в качестве картинок только те 3 добавленные. Хочу решить в минимум строк, но не понимаю как.

from tkinter import *
from random import *
import time

wind_width = 1000
wind_height = 560
wind_x = randint(0, 400)
wind_y = randint(60, 500)
win = Tk()
win.title('Падающие листья')
c = Canvas(win, bg='blue', width=wind_width, height=wind_height)
bg = PhotoImage(file='backGR.png')
id_bg = c.create_image(1, 1, anchor=NW, image=bg)
c.pack()
flag = False


class Fish:
    def __init__(self, img):
        self.listik = c.create_image(randrange(100, 900), 35, image=img)
        self.img = img
        self.xspeed = randrange(1, 5)
        self.yspeed = randrange(1, 5)

    def move(self):
        c.move(self.listik, self.xspeed, self.yspeed)
        pos = c.coords(self.listik)
        if pos[1] >= wind_height - 35 or pos[1] <= 35:
            c.delete(self.listik)
            self.listik = c.create_image(randrange(100, 900), 35, image=self.img)
        if pos[0] >= wind_width - 50:
            self.xspeed = -self.xspeed
        if pos[0] <= 50:
            self.xspeed = -self.xspeed

    def speed(self, a, event):
        if a == 1:
            self.yspeed = 10;
        if a == 2:
            self.yspeed = 20;


field_key1 = StringVar()
win.bind('<Escape>', lambda f: win.destroy())
pics = []
for i in range(3):
    pics.append(PhotoImage(file='leaf' + str(i) + '.png'))
listiki = []
for i in range(3):
    listiki.append(Fish(pics[i]))



def speed1(event):
    listiki[0].speed(1, event)
    listiki[1].speed(1, event)
    listiki[2].speed(1, event)



def speed2(event):
    listiki[0].speed(2, event)
    listiki[1].speed(2, event)
    listiki[2].speed(2, event)



win.bind('1', speed1)
win.bind('2', speed2)
while True:
    for fish in listiki:
        fish.move()
        win.update()
        time.sleep(0.005)
win.mainloop()

Ответы (1 шт):

Автор решения: insolor
for i in range(20):
    listiki.append(Fish(pics[i % 3]))

% - получить остаток от деления на число. При делении с остатком индекса из range(20) всегда будет получаться число в диапазоне от 0 до 2.

Также в данном случае вместо последовательного перебора списка изображений можно с помощью функции choice из модуля random выбирать случайный объект из списка:

for i in range(20):
    listiki.append(Fish(choice(pics)))
→ Ссылка