在嵌套列表中查找唯一元素

如果我有一个列表mylist = ["[amn,b,c]", "['a,d,e']", "['f,b,e']"],我需要一个列表使用所有独特的元素作为[amn,b,c,d,e,f],我怎么能做到这一点?


我尝试过创建一个函数,也尝试过其他一些方法,但无济于事。


功能:


mylist = ["[amn,b,c]", "[‘a,d,e’]", "[‘f,b,e’]"]


def print_list(the_list):


for each_item in the_list:


    if isinstance(each_item, list):


        print_list(each_item)


    else:


        print(each_item)


print_list(mylist)

输出:


[amn,b,c]


[‘a,d,e’]


[‘f,b,e’]

其他方法:


mylist = ["[amn,b,c]", "[‘a, d,e’]", "[‘f,b,e’]"]


mylist = str(mylist)


mylist = str(mylist)


mylist = [str(x) for x in (mylist)]


mylist = set(mylist)


i = {' ', "'", ',', '[', ']','‘', '’'}


mylist.difference_update(i)


mylist = list(mylist)


mylist.sort()


mylist

输出:


['a', 'b', 'c', 'd', 'e', 'f', 'm', 'n']

预期成绩:


[amn,b,c,d,e,f]

实际结果:


具有以下功能:


[amn,b,c]


[‘a,d,e’]


[‘f,b,e’]

使用另一种方法:


['a', 'b', 'c', 'd', 'e', 'f', 'm', 'n']


吃鸡游戏
浏览 212回答 3
3回答

慕虎7371278

您可以使用以下列表推导式, wherere.sub用于删除不需要的字符,底层列表是使用.split和 分割获得的,。最后,为了从嵌套列表中获取唯一元素,您可以使用itertools.chain扁平化嵌套列表,并set从结果中生成 a以保持唯一值:import refrom itertools import chainset(chain(*[re.sub(r'[\[‘’\"\]]', '', i).split(',') for i in mylist])){'a', 'amn', 'b', 'c', 'd', 'e', 'f'}在哪里:[re.sub(r'[\[‘’\"\]]', '', i).split(',') for i in mylist][['amn', 'b', 'c'], ['a', 'd', 'e'], ['f', 'b', 'e']]

呼唤远方

您可以使用以下列表推导式, wherere.sub用于删除不需要的字符,底层列表是使用.split和 分割获得的,。最后,为了从嵌套列表中获取唯一元素,您可以使用itertools.chain扁平化嵌套列表,并set从结果中生成 a以保持唯一值:import refrom itertools import chainset(chain(*[re.sub(r'[\[‘’\"\]]', '', i).split(',') for i in mylist])){'a', 'amn', 'b', 'c', 'd', 'e', 'f'}在哪里:[re.sub(r'[\[‘’\"\]]', '', i).split(',') for i in mylist][['amn', 'b', 'c'], ['a', 'd', 'e'], ['f', 'b', 'e']]

慕神8447489

首先,我会尝试替换,(逗号),'(单引号),[](使用模式匹配用空字符串打开右方括号。然后使用删除重复项set并使用list如下重建列表:my_list = ["[amn,b,c]", "['a, d,e']", "['f,b,e']"]result = sorted(list(set(([letter for word in my_list for letter in re.sub(',|\'|\[|]|\s+', '', word)]))))print(result)在哪里re.sub(',|\'|\[|]|\s+', '', word)]) 将替换字符串中的特殊字符。例如,['a, d,e']到ade.基于理解的解决方案在技术上等同于result = []for word in my_list:  # Break list of lists to lists    word = re.sub(',|\'|\[|]|\s+', '', word)    for letter in word:  # Process each word in the sub list        result.append(letter)print('results with duplicates:    ', result)  # List with possible duplicatesresult = set(result)  # Remove duplicates by converting to a setresult = list(result)  # Convert set back to list without duplicates (order is not preserved)print('results without duplicates: ', result)result = sorted(result)print('results in sorted order:    ', result)结果为results with duplicates:     ['a', 'm', 'n', 'b', 'c', 'a', 'd', 'e', 'f', 'b', 'e']results without duplicates:  ['e', 'a', 'd', 'm', 'f', 'c', 'n', 'b']results in sorted order:     ['a', 'b', 'c', 'd', 'e', 'f', 'm', 'n']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python