繁体   English   中英

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

[英]How to retrieve groups of n items in list

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

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

例:

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

尝试:

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

使用索引的列表理解是一种非常简单的方法。

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提供了分组器配方:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM