关于python:如何检索列表中的n个项目组

How to retrieve groups of n items in list

在Python中,如何打印列表中的每三个(或n组)项?

我已经搜索并找到了使用ITertools模块处理对的各种解决方案,但我未能使它们适应三人组。我将避免在这里包括我的尝试,因为我不确定它们是否表明正确的方式。

例子:

my_list = ["abra","cada","bra","hum","dee","dum"]

我想在一行中打印第一个三联体,然后在下一行中打印下一个三联体:

1
2
"Abra cada bra"
"Hum dee dum"

编辑:为了扩展通用性,问题被编辑成包含"n个项目组",而不仅仅是三个项目组。


尝试:

1
2
3
l1 = iter(list)
print '
'
.join([ ' '.join(x) for x in zip(*[l1]*3) ])


你可以直接用for循环

1
2
3
4
5
i = 0
list = ["abra","cada","bra","hum","dee","dum"]
while i < len(list):
  print("".join(list[i:i+3]))
  i += 3


如果您想要ITertools答案:

1
2
3
4
5
6
from itertools import islice

my_list = ["abra","cada","bra","hum","dee","dum"]
it = iter(my_list)
for sli in iter(lambda:list(islice(it, 3)), []):
    print("".join(sli))

或者使用zip和iter:

1
2
3
4
my_list = ["abra","cada","bra","hum","dee","dum"]
it = iter(my_list)
for sli in zip(it,it,it):
    print("".join(sli))

如果要对每个匹配项和格式进行编号:

1
2
3
4
5
n = 3
it = iter(my_list)
rn = map(str, range(1, n+1))
for sli in zip(it, it, it):
    print("".join(["{}: {}".format(a,b) for a,b in zip(rn, sli)]))

输出:

1
2
1: abra 2: cada 3: bra
1: hum 2: dee 3: dum

对于任意数量的元素的分组,有来自ITertools的Grouper配方:

1
2
3
4
5
6
7
8
9
from itertools import izip_longest
def grouper(iterable, n, fillvalue=None):
   "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

for grp in (grouper(my_list,3)):
    print("".join(grp))


使用索引进行列表理解是一种相当简单的方法。

1
print([my_list[i:i+3] for i in range(0, len(my_list), 3)])

或者根据需要打印:

1
2
for i in range(0, len(my_list), 3):
    print(' '.join(list[i:i+3]))

或者:

1
2
for t in zip(my_list[::3], my_list[1::3], my_list[2::3]):
    print(' '.join(t))