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

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

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

吃鸡游戏 2021-10-26 18:08:17
如果我有一个列表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']
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

您可以使用以下列表推导式, wherere.sub用于删除不需要的字符,底层列表是使用.split和 分割获得的,。


最后,为了从嵌套列表中获取唯一元素,您可以使用itertools.chain扁平化嵌套列表,并set从结果中生成 a以保持唯一值:


import re

from itertools import chain

set(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']]


查看完整回答
反对 回复 2021-10-26
?
呼唤远方

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

您可以使用以下列表推导式, wherere.sub用于删除不需要的字符,底层列表是使用.split和 分割获得的,。


最后,为了从嵌套列表中获取唯一元素,您可以使用itertools.chain扁平化嵌套列表,并set从结果中生成 a以保持唯一值:


import re

from itertools import chain

set(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']]


查看完整回答
反对 回复 2021-10-26
?
慕神8447489

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

首先,我会尝试替换,(逗号),'(单引号),[](使用模式匹配用空字符串打开右方括号。然后使用删除重复项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 duplicates

result = set(result)  # Remove duplicates by converting to a set


result = 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']


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

添加回答

举报

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