python-3.x - 如何将列表排序为给定大小的块?
问题描述
我正在尝试创建一种方法,将变量列表分类为大小为 4 的块,将相同的字符组合在一起,并按照给定的顺序排列。您可以假设唯一给定的字符是 a、b 和 c。例如,这里我想对 myInitialList 进行排序。
myInitialList = ['b1', 'c1', 'b2', 'c2', 'c3', 'b3', 'c4', 'a1', 'b4', 'b5', 'a2', 'c5', 'a3', 'a4', 'a5', 'c6', 'a6', 'a7', 'a8','a9']
endList = clumpsSize4(myInitialList)
print(endList)
这应该输出结果:
['a1','a2','a3','a4','b1','b2','b3','b4','c1','c2','c3','c4','a5','a6','a7','a8','b5','c5','c6','a9']
如何编写 clumpsSize4 方法?
解决方案
这不是最有效的,但这是我的尝试。对输入进行排序。有一个默认字典groupNums
,它将一个字母链接到它所在的当前数字块。groups
有另一个包含实际团块的默认字典。最后对组进行排序,遍历它们并加入:
from collections import defaultdict
def clump(l, size=4):
groups = defaultdict(list)
groupNums = defaultdict(int)
l = sorted(l)
for i in l:
letter = i[0]
key = str(groupNums[letter]) + letter
groups[key].append(i)
if len(groups[key]) == size:
groupNums[letter] += 1
result = []
for _, g in sorted(groups.items()):
result += g
return result
推荐阅读
- java - cameraCharacteristics 的拆箱可能会产生 Nullpointer Exception 和 FindBugs
- sql - 拒绝两个字段中的空值
- java - Android - 如何等到 SnapshotListener 完成?
- java - 如何使用itext5在A4纸上添加两张a5纸
- hybris - 在 Hybris 中创建导出脚本,用于导出在线目录中存在但不存在于 Staged 中的所有产品
- c# - 如何将字符串列表拆分为更小的字符串列表块
- java - 如何为字符串中的单词创建 Antlr3 词法分析器标记
- cloud - Gcloud平台上的自动快照安全吗?
- python - 向数据框中添加一行,即 2 个现有行的总和
- java - 如何格式化 LocalTime 变量