Разделить список на несколько подсписков на основе значения счетчика в Python

#python

#python

Вопрос:

Кажется, я не могу найти ответ на этот вопрос, но я хочу разделить список на несколько меньших списков на основе счетчика, чтобы каждый раз новый список содержал одинаковое максимальное количество значений.

Как только я создам новый подсписк, я хочу продолжить просмотр исходного списка, чтобы создать новый подсписк на основе следующих значений.

 keywordList = ["24/7 home emergency", "6 month home insurance", "access cover", "access insurance",
              "are gas leaks covered by home insurance", "central heating breakdown cover", "trace amp; access",
              "trace and access", "trace and access costs"]
maxLength = 4

for c, items in enumerate(keywordList):
    if c < maxLength:
        #append items to new list here
  

Ожидаемым результатом будут три новых списка, первые два длиной в четыре элемента, а последний будет длиной в один элемент. Но если бы в исходном списке внезапно оказалось 100 элементов, мы получили бы 25 новых списков.

Кажется, есть информация о равномерном разделении исходного списка, но ничего по заранее определенному значению. Любая помощь приветствуется, спасибо.

Комментарии:

1. Каков ваш ожидаемый результат с учетом ваших keywordList входных данных?

2. Я ожидаю, что результат будет следующим: keywordList1 = ["24/7 home emergency", "6 month home insurance", "access cover", "access insurance"] keywordList2 = ["are gas leaks covered by home insurance", "central heating breakdown cover", "trace amp; access", "trace and access"] keywordList3 = ["trace and access costs"] повторяться для стольких ключевых слов в исходном списке, т. Е. Если бы в исходном списке было 100 ключевых слов, у нас получилось бы 25 подсписков.

3. Учитывая, что вы не знаете длину keywordList , вам придется динамически генерировать имена списков. Это не то, для чего создан Python. Лучший способ выполнить то, что вы хотите сделать, был бы похож на уже предоставленные ответы.

Ответ №1:

Отредактируйте, чтобы отразить ваш текущий вопрос:

 keywordList = ["24/7 home emergency", "6 month home insurance", "access cover", "access insurance",
              "are gas leaks covered by home insurance", "central heating breakdown cover", "trace amp; access",
              "trace and access", "trace and access costs"]

leng = len(keywordList)
keywordList  = [""] * ((leng//4 1)*4 - leng)
result = [[keywordList[i] for i in range(j, j 4)] for j in range(0, leng, 4)]
result[-1] = [e for e in result[-1] if e]
  

result :

 [['24/7 home emergency',
  '6 month home insurance',
  'access cover',
  'access insurance'],
 ['are gas leaks covered by home insurance',
  'central heating breakdown cover',
  'trace amp; access',
  'trace and access'],
 ['trace and access costs']]
  

Идея этого метода состоит в том, чтобы заполнить keywordList пустыми строками, кратными 4 (может быть чем угодно), а затем разделить на 4. После чего очистите последний элемент от пустых строк (или того, что мы решили представлять как пустой объект)

Комментарии:

1. Извините, я не думаю, что вопрос был ясен, каждый новый список должен состоять из четырех элементов в длину. Итак, если бы у нас был исходный список из 100 элементов, мы получили бы 25 новых подсписков.

Ответ №2:

Если вы хотите разделить свой список на несколько подсписков, вы можете использовать следующее понимание списка:

 from itertools import repeat, zip_longest

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

iter_l = iter(l)

[list(filter(None.__ne__, i)) for i in zip_longest(*repeat(iter_l, 4))]
# [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15]]
  

Комментарии:

1. Создает ли это реальные новые списки, которые я могу вызывать из другой функции? Итак, я вижу, что он разделяет элементы, но в идеале я мог бы затем вызывать новые списки соответствующим образом, например, в newList1 newList2 newList3