我是Python初学者,需要帮助。
我的输入是
input: [(5, 1), (0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (6, 3)]
输入包含[(value,key)]
我的输出应该是
0,1,2
3,4,6
5
需要根据键计数对连续值进行分组,然后对其进行排序以显示最终输出。
ie)5出现一次,应该单独分组
0,1,2的密钥计数为3,因此应该组合在一起
3,4,6的密钥数为3,因此应该组合在一起
最终输出应按排序顺序显示,如下所示
0,1,2
3,4,6
5
我尝试使用itertools.groupby()
,它只根据相似的键对值进行分组。
任何解决方案都会有所帮助。
我尝试了以下内容:
sortedValidGroups = sorted(validGroups,key = lambda x:x[1])
print(sortedValidGroups)
groups = [list(group) for key, group in groupby(sortedValidGroups, itemgetter(1))]
print(groups)
输出:
[[(5, 1)], [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (6, 3)]]
但我的输出应该是(这是[(values,keys)]
)
[[(5, 1)],[(0, 3), (1, 3), (2, 3)],[(3, 3), (4, 3), (6, 3)]]
然后我需要对值进行排序以产生最终输出
0,1,2
3,4,6
5
答案 0 :(得分:0)
你的解决方案看起来不错,只需要一个好的结局...... 从您的最终输出中获取,对阵列进行分区,您可以执行以下操作
a = [[(5, 1)], [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (6, 3)]]
b = [[(0, 2), (1, 2), (2, 2), (3, 2)]]
def regroup(lst):
tmp = list()
for i in range(len(lst)):
step = lst[i][0][1]
for j in range(0,len(lst[i]),step):
tmp.append(lst[i][j:j+step])
return sorted(tmp , key=lambda x : x[0][0])
regroup(a)
[[(0, 3), (1, 3), (2, 3)], [(3, 3), (4, 3), (6, 3)], [(5, 1)]]
regroup(b)
[[(0, 2), (1, 2)], [(2, 2), (3, 2)]]