我在python中有一个列表,我想要获取列表中的所有单词,但是以x为块。
示例:
my_list = ["This" "is" "an" "example" "list" "hehe"]
counter = 3
需要输出:
["This" "is" "an"], ["example" "list" "hehe"]
谢谢:)
答案 0 :(得分: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 :(得分: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', '', '')]
答案 2 :(得分: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']]
答案 3 :(得分:0)
另一种方法是使用yield结果,这样你就可以按需获取它们,这将消除向外的方括号并允许一些其他自由,如延迟加载
与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)))
请注意,它不需要返回的外部列表,它会根据需要返回每个子列表。在这种情况下,我们只是用它来创建一个生成器,然后用','加入它,你就得到了你在答案中寻找的确切输出。