[英]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.