如何在lis中检索n个项目的组

2024-10-04 07:38:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我已经使用itertools模块搜索并找到了各种解决方案来处理对,但是我没有将它们调整为三人一组。我将避免在这里包括我的尝试,因为我不确定他们是否在所有的指示正确的道路。你知道吗

示例:

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

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

"Abra cada bra"
"Hum dee dum"

编辑:为了扩展通用性,问题被编辑为涵盖“n个项目的组”,而不仅仅是三个项目。你知道吗


Tags: 模块项目编辑示例列表my解决方案list
3条回答

尝试:

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

如果您想要一个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))

你可以直接使用for循环

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

相关问题 更多 >