根据值将列表拆分为子列表

2024-10-06 11:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我是乞丐。 我有以下列表(曲线和曲线长度):

crvs = [crv, crv, crv, crv, crv, crv, crv, crv, crv]
crvsLen = [18, 18, 18, 12, 12, 12, 12, 18, 12]

我需要创建子列表吗?还是二维阵列?[CRV]的长度如下(但实际[CRV]不是其[crvsLen]):

[[18, 18, 18, 18]
[12, 12, 12, 12, 12]]

我可以通过以下方式找到列表中唯一值的计数及其索引:

listOfUniqueLenghts = list(dict.fromkeys(crvsLen))
listOfUniqueLenghts = [12, 18]
indices = [i for i, x in enumerate(crvsLen) if x == listOfUniqueLenghts[0]]

它返回以下长度为12的[CRV]索引,例如:

indices = [3, 4, 5, 6, 8]

在给定任意数量的唯一crvsLen及其数量的情况下,如何将[CRV]存储在2d数组或复杂列表中,并根据其长度分别访问它们?我只能使用库存库

谢谢你,丹


Tags: 列表数量方式曲线dictlist计数indices
2条回答

编一本按长度编的字典可能是最容易的。一旦你有了这些,你应该能够得到你需要的任何东西

crvs = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
crvsLen = [18, 18, 18, 12, 12, 12, 12, 18, 12]

d = {}

for length, value in zip(crvsLen, crvs):
    d.setdefault(length, []).append(value)

d
# {18: ['a', 'b', 'c', 'h'], 12: ['d', 'e', 'f', 'g', 'i']}

# all 18s:
d[18]
#['a', 'b', 'c', 'h']

# list of lists:
list(d.values())
# [['a', 'b', 'c', 'h'], ['d', 'e', 'f', 'g', 'i']]

实现所需的最佳方法是使用具有列表值的词典:

d = collections.defaultdict(list)
for crv in crvs:
    d[len(crv)].append(crv)

现在,您有了一个字典,其中键的长度是唯一的,值是该长度的CRV列表

相关问题 更多 >