list中每一个元素是否是中list中其他元素的子元素

已知一个list,求这个list中每一个元素是否是其他元素的子元素,如果是,则删除这个元素.

list = ['GH', 'ACDB', 'AB', 'ABCFE', 'ABDCFE', 'ACFE', 'ABCD', 'ABD', 'ACBD', 'ACD', 'FCBA', 'FCDBA', 'FCA', 'FC', 'BACF', 'BCF', 'BDCF', 'BACFE', 'BCFE', 'BDCFE', 'BACD', 'BCD', 'BD', 'CBA', 'CDBA', 'CA', 'CAB', 'CDB', 'CB', 'EF', 'EFC', 'EFCABD', 'EFCBD', 'EFCD', 'DBACF', 'DBCF', 'DCF', 'DBAC', 'DBC', 'DC']

如上段代码,最后list应该剩下的元素是

list=['ABDCFE','GH']
阅读 1.8k
2 个回答
def get_without_proper_sub_element(s):
    def is_proper_sub_element(i):
        for j in s:
            if set(i).issubset(set(j)) and set(i) != set(j):
                return True
        return False
    return [i for i in s if not is_proper_sub_element(i)]

print(get_without_proper_sub_element(s))

结果是:

['GH', 'ABDCFE', 'EFCABD']

这里面的后面两个'ABDCFE'和'EFCABD'根据现有描述是都要保留的, 除非要求按顺序只保留第一个.

你这里子元素的定义是什么,是不管顺序,只要任意一个字符相同就算,还是字符顺序也一致?
不管哪种定义,你给出的结果都是错的

lst = ['GH', 'ACDB', 'AB', 'ABCFE', 'ABDCFE', 'ACFE', 'ABCD', 'ABD', 'ACBD', 'ACD', 'FCBA', 'FCDBA', 'FCA', 'FC', 'BACF', 'BCF', 'BDCF', 'BACFE', 'BCFE', 'BDCFE', 'BACD', 'BCD', 'BD', 'CBA', 'CDBA', 'CA', 'CAB', 'CDB', 'CB', 'EF', 'EFC', 'EFCABD', 'EFCBD', 'EFCD', 'DBACF', 'DBCF', 'DCF', 'DBAC', 'DBC', 'DC']

#只要任意一个字符相同
lst1 = []
for i, x in enumerate(lst):
    index = i
    for y in lst:
        if x != y and len(set(x).intersection(set(y))) == len(x):
            index = -1
            break

    if index != -1:
        lst1.append(x)

print lst1

#字符相同且顺序一致
lst1 = []
for i, x in enumerate(lst):
    index = i
    for y in lst:
        if x != y and x in y:
            index = -1
            break

    if index != -1:
        lst1.append(x)

print lst1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题