如何检索列表中的 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"
编辑: 为了扩大普遍性,对问题进行了编辑以涵盖 "groups of n items" 而不仅仅是三元组。
你可以直接使用 for 循环
i = 0
list = ["abra", "cada", "bra", "hum", "dee", "dum"]
while i < len(list):
print(" ".join(list[i:i+3]))
i += 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))
尝试:
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 的石斑鱼配方:
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))
在 Python 中,如何打印列表中的每个三元组(或 n 组)项目?
我搜索并找到了各种使用 itertools 模块处理配对的解决方案,但我未能将它们调整为三人一组。我不会在这里包括我的尝试,因为我不确定它们是否完全指示正确的方法。
示例:
my_list = ["abra", "cada", "bra", "hum", "dee", "dum"]
我想在一行中打印第一个三元组,然后在下一行打印下一个三元组:
"Abra cada bra"
"Hum dee dum"
编辑: 为了扩大普遍性,对问题进行了编辑以涵盖 "groups of n items" 而不仅仅是三元组。
你可以直接使用 for 循环
i = 0
list = ["abra", "cada", "bra", "hum", "dee", "dum"]
while i < len(list):
print(" ".join(list[i:i+3]))
i += 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))
尝试:
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 的石斑鱼配方:
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))