Nếu bạn muốn thay đổi danh sách tại chỗ, cách tốt nhất là để lặp từ phía sau và chỉ định một lát của những gì trước đây là một mục vào danh sách của mục đó n
lần.
này hoạt động vì phân lát:
>>> 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
Demo sử dụng:
>>> 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]
(Nếu bạn không muốn thay đổi nó tại chỗ, bạn có thể sao chép danh sách và trả lại bản sao, bản sao này sẽ không sửa đổi bản gốc. Điều này cũng sẽ hoạt động đối với các trình tự khác, chẳng hạn như tuple
s, nhưng không phải là lười như itertools.chain.from_iterable
và itertools.repeat
phương pháp)
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
như thế nào 'pandas' tham gia? Bạn đang thực sự cố gắng đạt được điều gì? Điều gì chính xác là sai với những gì bạn đã thử? – jonrsharpe