元素在python

时间:2016-06-02 08:53:09

标签: algorithm python-3.x

我从随机列表生成器得到不同的列表,我必须检查哪些列表将被接受,条件:相同类型的元素组合在一起,其他元素不关心。例如 : L1 = [Device1,Device2,Device3,Device4,Device5,Device6,Device7,Device8] 每个设备都有一个类型: TypeL1 = [H,U,U,K,D,P,F,D] 正确的配置是:[x,U,U,x,D,D,x,x] 在我的代码中,我试图找到重复的元素索引,然后我将它们排序并保存在另一个列表中。但它对我没有多大帮助。对于上面的例子,我得到L = [U,U,D,D]。我被困住了,我很有想法。我是编程的初学者,所以任何帮助都会很棒。

代码

D=[i for i ,x in enumerate (check_type)if check_type.count(x)> 1]
logging.info("the index repeted elem : %s",D)
X = len(D)
print ("length D:",X)
Flag.clear()
while len(D)>1:
    A=check_type[int(D[0])]
    print("A:",A)
    for i in range(0,len(D)):
        if check_type[int(D[i])] == A:
            Flag.append(D[i])
    print ("Flag:",Flag )

    D=list(set(D).difference(Flag))
    print ("D:",D)
logging.info("the sorted indexes:%s",Flag) 

2 个答案:

答案 0 :(得分:0)

L = ['H', 'U', 'P', 'P', 'K', 'H', 'U', 'H', 'D', 'P'] # List of devices
T = {'H','U','K','D','P','F','F'} # List of types
res = []
for t in T:
v = [l for l in L if l == t]
for i in v: res.append(i)
print(res)

输出:

['D', 'H', 'H', 'H', 'K', 'P', 'P', 'P', 'U', 'U']

我的approch使用python3.x - 对于每种类型的设备,我使用v中的列表推导对设备进行分组。最后将v元素添加到另一个返回列表中。

答案 1 :(得分:0)

我找到另一种方式:我使用了一个列表列表,并在每个元素中保存了匹配的项目。然后我在一个列表中转换了列表列表并删除了重复的元素。我得到了我想要的结果。

lista= []
    for i in range (0,len(check_type)):
        lista.append([])
        #print(lista)
        for j in range(0,len(check_type)):   
            if check_type[i]==check_type[j]:
               lista[i].append(j)
    #print ('The List of lists!! :',lista) 
    A = (list(itertools.chain.from_iterable(lista)))
    #print ('The converted list indexes!! :',A)
    B=[k for n ,k in enumerate(A) if k not in A[:n]]
    logging.info ('The final correct list indexes!! :%s',B)