列表数组找重复值归类组合

本文介绍了一种高效的方法,用于在给定的pass_al列表中按特定顺序去重并根据dealer列表进行重复值归类。通过numpy数组操作和集合处理,作者展示了如何快速找出重复的pass_a_order,并将其与dealer列表匹配,生成了无重复且按顺序排列的经销商索引列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pass_al = [[6,1,7],[6,1,7],[6,2,7],[6,3,7],[6,3,7],[6,4,7],[6,3,7],[6,4,7],[6,1,7],[6,5,7],[6,2,7]]
pas_a_order = ['p2','p1','p3','p2','p1','p3','p4','p5','p6','p5','p8']
dealer = ['PLW48150306', 'V14090921', 'PLW48150306', 'RUC29210220', 'KZA86210612', 'PLW48150306', 'KZA67201114','GRA01191126', 'KZA51190302', 'V01090112', 'BYB01210423', 'V27100515', 'V01090112', 'EUP28210115', 'N57130105', 'RUM78210304', 'RUN70150717', 'KZA67201114', 'RUM51210605', 'Y77070221', 'RUY68181027', 'KZA28210429', 'RUM777210109', 'V08130323', 'EUP94201127', 'LTV19150313', 'ARM97190913', 'UAK57210617', 'RUS22190708', 'RUN10210618', 'LTV02141024', 'KGB88200815']

pas_a_order = [i[1] for i in pass_al]
pass_l_set = list(set(pas_a_order)) # 去重 ,maybe redundant
pass_l_set.sort(key=pas_a_order.index) # pass_al -> pas_a_order,get a list of table a pass order ,maybe redundant
l_a_order = [k[1] for k in pass_al]
# 最优重复值归类组合方法
set_dealer = list(set(dealer))
set_dealer.sort(key=dealer.index) # 这1步只是为排序后方便人工检查结果,没有也不影响成果的。

a = np.array(dealer)
tt = []
for i in set_dealer:
    i_l = np.where(a==i)
    tt.append(list(i_l[0]))    
print(tt)

# 中等和笨办法都是稍微有bug,但是之前能运行成功的 todo

# 中等重复值归类组合方法
dealer = [j[3] for j in pass_al]
dealer_sort = [j for j in set(_ for _ in dealer)]
dealer_sort.sort(key=dealer.index)

fing_set = []
for index,j in enumerate(dealer_sort): 
    l_t = []
    try:
        while True:                    
            index = dealer.index(j,index) 
            l_t.append(index)
            index += 1
    except Exception as e:
        pass
    fing_set.append(l_t)

# 每次找到重复值后,下次就在它的index += 1 后继续找,代码不少但比笨办法快不少

print(fing_set)
# 笨办法,2个相同列表遍历其中一个,每个元素都在另一个上穷尽找相同,最后对结果去重。
pl = []               
deal_fing = []
for j in pass_l_set: 
    p_ind = l_a_order.index(j) # 找到合格行所在👈index后,找对应的经销商编号(dealer和l_a_order所在行index完全相同且l_a_order没有重复)
    pl.append(p_ind)
    deal_fing.append([index for index,x in enumerate(dealer) if x == dealer[p_ind]]) # 获取等于dealer[p_ind](合格经销商编号)的所有下标
    # 针对遍历会重复出现结果,不能对dealer去重,否则会导致[index for index,x in enumerate(dealer) if x == dealer[p_ind]] 
    # 无法找到同一个元素的>=1个下标,只能对结果去重。

# 对deal_fing去重,生成合格 index of F$列表.
fing_set = [list(j) for j in set(tuple(_) for _ in deal_fing)]
fing_set.sort(key=deal_fing.index) # 让去重后的数组顺序和deal_fing一致
print(fing_set) # get all the same numnber of dealer index
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值