从列表中获取每个X字

时间:2013-04-08 04:38:18

标签: python list block slice defined

我在python中有一个列表,我想要获取列表中的所有单词,但是以x为块。

示例:

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

需要输出:

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

谢谢:)

4 个答案:

答案 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')]

如果列表不是计数器的倍数,您可以使用mapitertools.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)))

请注意,它不需要返回的外部列表,它会根据需要返回每个子列表。在这种情况下,我们只是用它来创建一个生成器,然后用','加入它,你就得到了你在答案中寻找的确切输出。