def prefix(iterable, prefix):
"""Returns every element of an iterable prefixed with a given value."""
#prefix("ABCDEFG", "x") --> ("x", "A"), ("x", "B"), ("x", "C"), ("x", "D"), ...
return zip(itertools.repeat(prefix), iterable)
我们只需:
(prefix(items, first) for items in zip(*grouper(3, data)))
以及
(prefix(items, first) for _, items in itertools.groupby(sorted(data), operator.itemgetter(0)))
给予
^{pr2}$有关一些有用的变体,请参见注释。在
编辑:这是基于最初的问题,假设数据将在一个列表中,而不是多个输入列表中。对问题的编辑已经清楚地表明不是这样,所以我建议您遵循Janne Karila's solution。在
假设您知道有多少个不同的值,这是一个很好的解决方案,使用} recipe :
itertools
'^{给我们:
^{pr2}$请注意,如果没有足够的值,这将用
None
s填充列表。在{a3}如果你不想显示,就自然地使用。E、 g组:
请注意,我使用的是python3.x,因此在2.x下,无论我在哪里使用}变成{}。在
zip()
,您可能想要itertools.izip()
,而{请注意,更好的方法是假设您知道定义的值应该在第一个列表中,什么应该在第二个列表中,等等。。。在
产生:
^{pr2}$当然,这只适用于给定的示例,假设您的实际数据不同,您将希望将
operator.itemgetter(0)
更改为一个函数,该函数定义您的项应分组到哪个列表中。在请注意,我们可能需要封装前缀工作:
我们只需:
以及
更具可读性。在
对第一个元素使用itertools repeat:
相关问题 更多 >
编程相关推荐