使用lis中元素的位置创建子组

2024-04-26 14:54:39 发布

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

我必须根据元素的值用列表中元素的位置创建子组,这意味着子组将包含列表中相同的元素。你知道吗

但是,子组的大小将取决于组的值。你知道吗

示例:A = [2,1,1,2,1]将创建[0, 3] [1] [2] [4]

我已经写了下面的代码。然而,所有的测试用例都没有通过。你知道吗

如果A=[2,1,2,1,2,2],则无法获得正确的输出。我的情况是:

0 2
4 5
1
3

然而,期望是:

0 2
1
3
4 5

下面是我的代码:

A = [2,1,1,2,1]
uniqueCounts = []
for x in A:
    if x not in uniqueCounts:
        uniqueCounts.append(x)

for i in range(len(uniqueCounts)):
    n = uniqueCounts[i]
    p = [i for i,x in enumerate(A) if x == n]

    if(len(p)==1):
        print(*p)
    else:
        q = int(len(p)/n)
        count = 0
        c = 0
        while count < q:
            print(*p[c:n+c])
            c = c + n
            count = count + 1

Tags: 代码in元素示例列表forlenif
2条回答

您应该使用numpy和函数np.where()

import numpy as np

A = [2,1,1,2,1]
A = np.asarray(A)
ID = np.where(A == 2)[0]

输出:

ID = array([0, 3], dtype=int64)

然后您可以使用此数组将其转换为列表,使用shapelen计算元素的数量。。。等等。你知道吗

要返回代码:

A = [2,1,1,2,1]
uniqueCounts = list(set(A))

set正在返回一个没有重复项的集。将其转换为列表可以直接获得唯一计数。你知道吗

结论:

A = [2,1,1,2,1]
uniqueCounts = list(set(A))
A = np.asarray(A)

subgroup = list()

for elt in uniqueCounts:
    subgroup.append(tuple(np.where(A == elt)[0]))

有些工作仍然需要得到所需的输出,我会让你:)

首先用唯一的元素对列表A排序。不会失去秩序。然后从原始列表中找到排序列表中元素的所有索引

A = [2,1,1,2,1]
sortedA = sorted(set(A), key=A.index)
# [2, 1]

[[i for i,x in enumerate(A) if x==e] for e in sortedA]
# [[0, 3], [1, 2, 4]]

相关问题 更多 >