繁体   English   中英

检查列表项python的子字符串

[英]Check for substrings of list items python

说我有一个清单:

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

最后,您将基本项目放在一个单独的列表中,您可以使用它。

实际上,查找子字符串是一个众所周知的主题,您可以在 SO 上轻松找到。 我将专注于您希望以独特的核心成分列表结束的部分。 下面将首先根据项目的长度对项目进行排序,从而增加在列表前面找到基本构建块的机会。

将 basic_items 变成一个集合可能是多余的,但它至少保证了唯一的表示。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM