我要删除元素并对其排序
['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'
答案 0 :(得分:1)
将#include <iostream>
与set
一起使用:
sorted
答案 1 :(得分:1)
您可以尝试以下方法:
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+
代表一个或多个整数。
答案 2 :(得分:0)
在变量 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']