为了账号安全,请及时绑定邮箱和手机立即绑定

从字典和列表中删除重复元素并对元素进行排序

从字典和列表中删除重复元素并对元素进行排序

明月笑刀无情 2021-11-02 16:54:05
我想删除并订购我的元素列表['elt9', 'elt19', 'elt1', 'elt2', 'elt3','elt9','elt2']并得到['elt1', 'elt2', 'elt3', 'elt9', 'elt19']这是我所有的代码:import itertools as itimport refrom collections import OrderedDictfrom itertools import chainL1 = ['elt1', 'elt2', 'elt3', 'elt4', 'elt5', 'elt6', 'elt9']L2 = [['elt1','elt11'],['elt2','elt12'],['elt3','elt13'], ['elt4','elt14']]def generate_combinations(L):        L_com = []    for r in range(1, len(L)+1):        L_com += list(it.combinations(L, r))               all_combination= []    for i in L_com:        for j in L2:            all_combination.append(j+list(i))    l = sorted(set(all_combination), key = lambda x : int(re.findall(r'\d+', x)[0]))    with open('combinations.txt', 'w') as file_handler:         for item in l:             file_handler.write("{}\n".format(item))if __name__ == "__main__":    generate_combinations(L1)我有这个错误:TypeError                                 Traceback (most recent call last)<ipython-input-49-e0b599cc4158> in <module>()      1 if __name__ == "__main__":----> 2     generate_combinations(L1)<ipython-input-45-81ef5db3553e> in  generate_combinations(L1)     21      22     #sorted(set(all_combination), key=lambda x: int(x[3:]))---> 23     l = sorted(set(all_combination), key = lambda x : int(re.findall(r'\d+', x)[0]))     24      25     with open('combinations.txt', 'w') as file_handler:TypeError: unhashable type: 'list'
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

使用set有sorted:


l = ['elt9', 'elt19', 'elt1', 'elt2', 'elt3','elt9','elt2']

sorted(set(l), key=lambda x: int(x[3:]))


['elt1', 'elt2', 'elt3', 'elt9', 'elt19']


查看完整回答
反对 回复 2021-11-02
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

你可以试试这个:


import re

l= ['elt9', 'elt19', 'elt1', 'elt2', 'elt3','elt9','elt2']

l = sorted(set(l), key = lambda x : int(re.findall(r'\d+', x)[0]))

l

['elt1', 'elt2', 'elt3', 'elt9', 'elt19']

这也适用于任何数字(3、4 位数字等),而不仅仅是 2。但需要注意的是,它应该只有一个数字才能工作。re.findall 查找提供给它的所有模式并返回满足该模式的列表。模式\d+代表一个或多个整数。


查看完整回答
反对 回复 2021-11-02
?
冉冉说

TA贡献1877条经验 获得超1个赞

在变量all_combination 中有二维列表/数组 ([['elt1', 'elt11', 'elt1'], ['elt2', 'elt12', 'elt1'], ['elt3', 'elt13', 'elt1'], ['elt4', 'elt14', 'elt1'], ['elt1', 'elt11', 'elt2'], ...) 并且你正在尝试这样做:


l = sorted(set( all_combination ), key = lambda x : int(re.findall(r'\d+', x)[0]))


该部分代码适用于您在帖子中提到的列表类型:


L1 = ['elt9', 'elt19', 'elt1', 'elt2', 'elt3','elt9','elt2']

l = sorted(set(L1), key = lambda x : int(re.findall(r'\d+', x)[0]))

print (l)

结果:['elt1'、'elt2'、'elt3'、'elt9'、'elt19']


查看完整回答
反对 回复 2021-11-02
  • 3 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信