您好,感谢您查看我的问题!我已阅读有关python的文档和itertools.groupby( ) in python的最高评价问题。但是我仍然对这个功能如何运作感到困惑。有人可以引导我完成for rank, group in groupby (hand , lambda card: card [1])
次迭代吗?特别是lambda card: card[1]
部分。从我的理解,它只是返回卡[1]但卡没有变量。此外,对于rank, group
,是因为手的每个索引有2个值,例如第一张牌是' 3S'因此它的值有3和S?如果将每个手的指数改为3个值,是否需要第三个变量?例如。 ' 3SH&#39 ;?对不起,如果这似乎是一个已经回答的问题,即使用简单的话,我也无法理解......
hand = ['3S', '3D', '3H', '4D']
sorted_hand_by_suit = []
for rank, group in groupby (hand , lambda card: card [1]):
sorted_hand_by_suit.append(list(group))
return sorted_hand_by_suit
print sorted_hand_by_suit # [['3S'],['3D', '4D'], [3H]]
答案 0 :(得分:0)
您可以将其重新编写为
what_to_group = hand
def how_to_group(an_item):
return an_item[1]
grouped_objects = groupby(what_to_group,how_to_group)
sorted_hand = []
for object in grouped_objects:
rank = object[0]
group = list(object[1])
sorted_hand.append(group)
我不确定这是否有助于你弄清楚是什么意思......
表示这样做要好得多。
sorted_hand_by_suite = sorted(hand,key=lambda card:reversed(card))
(虽然它并没有做同样的事情......)
答案 1 :(得分:0)
您的示例需要一些更正。在这里,我对其进行了重构:
给出
hand = ["3S", "3D", "3H", "4D"]
pred = lambda x: x[1]
iterable = sorted(hand, key=pred)
代码
[list(grp) for key, grp in groupby(iterable, key=pred)]
# [['3D', '4D'], ['3H'], ['3S']]
详细信息
要了解这一点,请先打印键的结果:
[key for key, grp in it.groupby(iterable, key=pred)]
# ['D', 'H', 'S']
请注意,这些键与前一个答案中的组相关。
groupby
对象的键由接受功能的key
参数定义。 lambda函数pred = lambda x: x[1]
等效于以下常规函数:
def pred(x):
return x[1]
因此,随着手的每张牌迭代,每个字符串的索引1
被指定为组的键。换句话说,如果下一个卡'3D'
,则D
成为组的密钥。所有在索引D
包含1
的连续卡将被添加到组中。
另请参阅this post,有关如何使用Python的itertools.groupby()
?。