How to retrieve groups of n items in list
在Python中,如何打印列表中的每三个(或n组)项?
我已经搜索并找到了使用ITertools模块处理对的各种解决方案,但我未能使它们适应三人组。我将避免在这里包括我的尝试,因为我不确定它们是否表明正确的方式。
例子:
我想在一行中打印第一个三联体,然后在下一行中打印下一个三联体:
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)) |
。