Python 如何检索列表中n个项目的组

Python 如何检索列表中n个项目的组,python,itertools,Python,Itertools,在Python中,如何打印列表中的每三个(或n组)项 我已经搜索并找到了使用该模块处理对的各种解决方案,但我未能将它们调整为三人一组。我将避免在这里包括我的尝试,因为我不确定它们是否指示了正确的方向 例如: my_list=[“abra”、“cada”、“bra”、“hum”、“dee”、“dum”] 我想在一行打印第一个三元组,然后在下一行打印下一个三元组: "Abra cada bra" "Hum dee dum" 编辑:为了扩大通用性,问题已被编辑为涵盖“n个项目的组”,而不仅仅是三个

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

我已经搜索并找到了使用该模块处理对的各种解决方案,但我未能将它们调整为三人一组。我将避免在这里包括我的尝试,因为我不确定它们是否指示了正确的方向

例如:

my_list=[“abra”、“cada”、“bra”、“hum”、“dee”、“dum”]

我想在一行打印第一个三元组,然后在下一行打印下一个三元组:

"Abra cada bra"
"Hum dee dum"


编辑:为了扩大通用性,问题已被编辑为涵盖“n个项目的组”,而不仅仅是三个项目

您可以使用直截了当的for循环

i = 0
list = ["abra", "cada", "bra", "hum", "dee", "dum"]
while i < len(list):
  print(" ".join(list[i:i+3]))
  i += 3
i=0
列表=[“艾布拉”、“卡达”、“文胸”、“哼”、“迪”、“达姆”]
而我
使用索引进行列表理解是一种相当简单的方法

print([my_list[i:i+3] for i in range(0, len(my_list), 3)])
或根据需要打印:

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

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


如果您想要itertools答案:

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:

my_list = ["abra", "cada", "bra", "hum", "dee", "dum"]
it = iter(my_list)
for sli in zip(it,it,it):
    print("".join(sli))
如果要对每个匹配项和格式进行编号:

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: abra 2: cada 3: bra
1: hum 2: dee 3: dum
要对任意数量的元素进行分组,有来自itertools的grouper配方:

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))

第0、1、2项是什么意思;然后是3,4,5;6, 7, 8? 还是完全不同的东西?@AnttiHaapala:是的(1,2,3;然后4,5,6;…)记住不要像数据类型那样命名变量。因此,列表
list
应该被命名为
l
而不是
list
。你的切片答案怎么了?这样更好。3可以很容易地更改为n。毕竟,他在问题的标题中加了“n”。谢谢你把这些选项包括进来!我接受了这个答案,因为它涵盖了我可能必须处理的一些情况。但对于未来的读者,我应该提到下面的
for loop
解决方案可能是最简单的解决方案。不用担心,您标记了itertools,所以我提供了一些itertools解决方案,使用iter和zip可能仍然比for loop和切片更好
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))