Jeśli chcesz zmodyfikować listę w miejscu, najlepszym sposobem jest iteracyjne od tyłu i przypisać wycinek z tego, co poprzednio było przedmiotem z listy tego przedmiotu, n
razy.
To działa z powodu przypisania slice:
>>> ls = [1, 2, 3]
>>> ls[0: 0+1]
[1]
>>> ls[0: 0+1] = [4, 5, 6]
>>> ls
>>> [4, 5, 6, 2, 3]
def repeat_elements(ls, times):
for i in range(len(ls) - 1, -1, -1):
ls[i: i+1] = [ls[i]] * times
Wykorzystanie Demo:
>>> a = [1, 2, 3]
>>> b = a
>>> b
[1, 2, 3]
>>> repeat_elements(b, 3)
>>> b
[1, 1, 1, 2, 2, 2, 3, 3, 3]
>>> a
[1, 1, 1, 2, 2, 2, 3, 3, 3]
(Jeśli nie chcesz zmodyfikować go w miejscu, można skopiować listę i zwróć kopię, która nie zmodyfikuje oryginału.To będzie również działać dla innych sekwencji, takich jak tuple
s, ale nie jest leniwy jak itertools.chain.from_iterable
i itertools.repeat
metoda)
def repeat_elements(ls, times):
ls = list(ls) # Makes a copy
for i in range(len(ls) - 1, -1, -1):
ls[i: i+1] = [ls[i]] * times
return ls
Jak 'pandas' zaangażowane? Co tak naprawdę próbujesz osiągnąć? Co dokładnie jest nie tak z tym, co próbowałeś? – jonrsharpe