Как разбить список на куски одинакового размера, и если список нечетный, я хочу добавить чанк к предыдущему чанку - PullRequest
0 голосов
/ 22 апреля 2019

Если набор данных содержит n = 385, теперь я хочу разделить так, чтобы каждый кусок содержал точки как 95,95,95,95,5.Теперь я хочу добавить последние 5 баллов к предыдущему чанку

Я работаю на ноутбуке Jupyter

def chunks(l, n):
   return [l[i:i+n] for i in range(0, len(l), n)]

slice =chunks(dataframe, int(len(dataframe)/4))

Я ожидал, что результат будет равен

Ответы [ 3 ]

0 голосов
/ 22 апреля 2019

Вы можете добавить условие, при котором, если последний фрагмент не имеет желаемой длины, функция добавляет его к предыдущему фрагменту и возвращает только до этого индекса. Например:

def chunks(l, n):
  foo = [l[i:i+n] for i in range(0, len(l), n)]
  if len(foo[-1]) != n:
    foo[-2]+= foo[-1]
    return foo[:-1]
  else:
    return foo


l = [i for i in range(100)]

chunks = chunks(l, 6)
print(chunks)

Выход:

[[0, 1, 2, 3, 4, 5], 
 [6, 7, 8, 9, 10, 11],
...
 [84, 85, 86, 87, 88, 89], 
 [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
0 голосов
/ 22 апреля 2019

Вы можете обновить второй последний подсписок списка в существующем коде, добавив последний подсписок и затем удалив последний подсписок, только если последний подсписок не имеет размер n, размер чанка

def chunks(l, n):
   li = [l[i:i+n] for i in range(0, len(l), n)]
   #Add the second last sublist to the last sublist
   #Only if the last sublist is not of size n
   if len(li[-1]) != n:
        li[-2] += li[-1]
        #Remove the last element
        li.pop(-1)
   return li

Выход будет

print(chunks([1,2,3,4,5,6,7,8,9],3))
#[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(chunks([1,2,3,4,5,6,7,8,9,10],3))
#[[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
0 голосов
/ 22 апреля 2019
def chunks (l, n):
  r = [l]
  while len (r [-1]) >= 2 * n:
    r [-1:] = [r [-1][:n], r [-1][n:]]
  return r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...