2013-04-08 6 views
-3

У меня есть список в python, и я хочу получить все слова в списке, но в блоках x.Получение каждого X слова из списка

Пример:

my_list = ["This" "is" "an" "example" "list" "hehe"] 
counter = 3 

нужно ли выводить:

["This" "is" "an"], ["example" "list" "hehe"] 

Спасибо :)

+0

Ваша функция должна принимать список и счетчик. В функции создайте список списков (пустой) и список (пустой) и целое число current_count (0). Пока current_count меньше, чем счетчик, добавьте в свой пустой список. Когда он переполняется, установите его в 0 и добавьте список в список списков. Когда у вас закончились записи, верните список списков. – Patashu

+1

Ваш список содержит только один элемент. Строки сгруппированы, так как вы оставили запятые в списке –

ответ

1
>>> my_list = ["This", "is", "an", "example", "list", "hehe"] 
>>> counter = 3 
>>> zip(*[iter(my_list)] * counter) 
[('This', 'is', 'an'), ('example', 'list', 'hehe')] 

В Python3 вам нужно конвертировать результат в zip() к list

>>> list(zip(*[iter(my_list)] * counter)) 
[('This', 'is', 'an'), ('example', 'list', 'hehe')] 

Вы можете использовать map или itertools.izip_longest, если список не является кратным счетчика

>>> my_list = ["This", "is", "an", "example", "list", "hehe", "onemore"] 
>>> map(None, *[iter(my_list)] * counter) 
[('This', 'is', 'an'), ('example', 'list', 'hehe'), ('onemore', None, None)] 


>>> from itertools import izip_longest 
>>> list(izip_longest(*[iter(my_list)] * counter, fillvalue = '')) 
[('This', 'is', 'an'), ('example', 'list', 'hehe'), ('onemore', '', '')] 
+0

Спасибо, как бы я сделал это в списке было 7 элементов в нем, например, и осталось одно слово? – VEDYL

+0

@ VEDYL, он усекается - вы получаете только первые 6 предметов. Достаточно легко изменить это, используя itertools.izip_longest или карту –

1

Вы можете попробовать этот простой код:

my_list = ["This" "is" "an" "example" "list" "hehe"] 
counter = 3 
result = [] 

for idx in range(0, len(my_list), counter): 
    print my_list[idx: idx +counter] 
    result.append(my_list[idx: idx+counter]) 

print result 
1

использованием itertools.islice() :

In [20]: from math import ceil 

In [21]: from itertools import islice 

In [22]: lis=["This", "is", "an", "example", "list", "hehe"] 

In [23]: it=iter(lis) 

In [24]: [list(islice(it,3)) for _ in xrange(int(ceil(len(lis)/3)))] 
Out[24]: [['This', 'is', 'an'], ['example', 'list', 'hehe']] 
+0

Вы забыли импорт для 'ceil' – jamylak

+0

@jamylak спасибо, исправлено это. –

0

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

Почти такие же, как Artsiom Rudzenka, но дает вывод, который вы хотели точно ,

def slicer(l, step): 
    for i in range(0, len(l), step): 
     yield l[i:i+step] 

my_list = ["This", "is", "an", "example", "list", "hehe"] 

print(', '.join(str(x) for x in slicer(my_list, 3))) 

Обратите внимание, что он не нуждается в внешнем списке, который он возвращает, он возвращает каждый подсписчик по требованию. В этом случае мы просто используем его для создания генератора и просто присоединяем его к «,», и у вас есть точный результат, который вы искали в своем ответе.

Смежные вопросы