Python 检查列表项的子字符串

Python 检查列表项的子字符串,python,list,Python,List,假设我有一张清单: list = ['Apple', 'apple cider', 'apple juice', 'Mango', 'Mangosteen', 'Banana'] 如何检测列表项是否是其他列表项的子字符串,然后删除这些其他列表项。列表现在应该如下所示: list = ['Apple', 'Mango', 'Banana'] 我只需要获取列表中字符串的最基本版本。一些东西。首先,您不应该使用list作为变量名,因为它是一个关键字。另外,我在比较时使用了lower()

假设我有一张清单:

    list = ['Apple', 'apple cider', 'apple juice', 'Mango', 'Mangosteen', 'Banana']
如何检测列表项是否是其他列表项的子字符串,然后删除这些其他列表项。列表现在应该如下所示:

  list = ['Apple', 'Mango', 'Banana']

我只需要获取列表中字符串的最基本版本。

一些东西。首先,您不应该使用
list
作为变量名,因为它是一个关键字。另外,我在比较时使用了
lower()
,因为字符串的大小写似乎不相关

l = ['Apple', 'apple cider', 'apple juice', 'Mango', 'Mangosteen']
basic_items = []  # To save the basic strings (i.e. 'Apple', 'Mango')
for list_item in l:  # Loop through all the items
    item_is_basic = True  # True if the item is basic (which we assume beforehand)
    for item in basic_items:  # Loop through the basic items we already found
        if list_item.lower() in item.lower():
            # If the list item is contained in a basic item, it means the list item is "more basic"
            basic_items.remove(item)  # We remove the item which is not considered basic anymore
            break  # We stop the loop through the basic items
        if item.lower() in list_item.lower():
            # If the list item contains a basic item, it means the list item is NOT basic
            item_is_basic = False
            break  # We stop the loop through the basic items

    if item_is_basic:
        # Finally, if the item is considered basic, we add it to basic_items
        basic_items.append(list_item)

print(basic_items)  # outputs ['Apple', 'Mango']

最后,你会在一个单独的列表中列出你的基本项目,你可以使用它。

实际上,查找子字符串是一个众所周知的话题,你可以很容易地在上面找到。我将集中讨论您希望以独特的核心成分列表结束的部分。下面将首先根据项目的长度对其进行排序,从而增加在列表前面找到基本构建块的可能性

将基本的_项放入一个集合可能是多余的,但它至少保证了唯一的表示

listt = ['Apple', 'apple cider', 'apple juice', 'Mango', 'Mangosteen']

listt = sorted(listt, key=len)

basic_items = set()

for val in listt:
    if not any([val.lower().find(x.lower()) != -1 for x in basic_items]):
        basic_items.add(val)

listt = list(basic_items)

也许你应该更具体地说明你的目的~你的意思是我使用这个实现的目的是什么?还有你尝试过什么,以及你的实现到底有什么问题。你的规格有点含糊不清。例如,如果apple juice出现在apple之前,该怎么办?如果我的答案(或任何其他答案)解决了您的请求,请将其标记为Correct。代码在多行上,并已注释,因此可读。如果你愿意的话,我可以把我的答案缩短到几行。我的例子适用于你的新样本。输出[‘苹果’、‘芒果’、‘香蕉’]