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

我想删除并订购我的元素列表


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

并得到


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

这是我所有的代码:


import itertools as it

import re

from collections import OrderedDict

from itertools import chain


L1 = ['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'


明月笑刀无情
浏览 214回答 3
3回答

aluckdog

使用set有sorted:l = ['elt9', 'elt19', 'elt1', 'elt2', 'elt3','elt9','elt2']sorted(set(l), key=lambda x: int(x[3:]))['elt1', 'elt2', 'elt3', 'elt9', 'elt19']

慕盖茨4494581

你可以试试这个:import rel= ['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+代表一个或多个整数。

冉冉说

在变量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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python