gpt4 book ai didi

Python itertools groupby 在列表理解中的多次使用

转载 作者:行者123 更新时间:2023-11-30 22:15:50 26 4
gpt4 key购买 nike

我正在尝试做这样的事情:

groups = groupby(all_data, key=itemgetter(1))
result = []
for k,g in groups:
gg = list(g)
count = len(gg)
v = gg[0][3:] #No empty groups, right?
hosts = ";".join([x[0] for x in gg])
result.append(v + (count,) + (hosts,))

我讨厌循环。 ;) 有没有机会通过理解来做到这一点?问题是 g 是迭代器,而不是列表,我不知道如何将其转换为理解列表。

最佳答案

将其转换为列表理解没有必要,也没有显着的好处。您可能会留下只有您才能理解的不可读代码。

我支持的一个风格点是不要过早或不必要地创建列表。这使得可以选择迭代结果,而不是构建包含所有结果的列表。

例如:

from itertools import groupby
from operator import itemgetter

all_data = [('A', 'B', 'C', 'S', 'T'),
('E', 'B', 'C', 'U', 'V'),
('H', 'I', 'J', 'W', 'X')]

groups = groupby(all_data, key=itemgetter(1))

def fun(groups):
for _, g in groups:
gg = list(g)
hosts = ';'.join(list(map(itemgetter(0), gg)))
yield gg[0][3:] + (len(gg),) + (hosts,)

res = list(fun(groups))

[('S', 'T', 2, 'A;E'),
('W', 'X', 1, 'H')]

关于Python itertools groupby 在列表理解中的多次使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com