检查字符串是否包含列表中的任何元素

Check if string contains any elements from list

检查下面以获得更好的解释 我在逐行读取的文件中有一长串项目,我想对其中包含特定字符串的所有项目进行排序。如果单词不包含排序中的任何元素,那么它将被添加到字典中。我怎么做?我已经阅读了该网站上的其他一些情况,但我就是不明白......所以这可能是重复的,但我需要有人向我解释如何做到这一点。 (是的,这些物品来自游戏 TF2)

item_list = ("Non-Tradable Ubersaw", "Screamin' Eagle", "'Non-Craftable Spy-cicle"

sort = ("Non-Tradable", "Non-Craftable") # The items that are not allowed
for word in item_list:
    if not sort in word:
        if word in items: # add to the dictionary
            items[word] += 1
        else:
            items[word] = 1

已经回答了,只是为了把问题说清楚。 我想 运行 对列表进行排序:item_list 我想通过制作一个数组来做到这一点:sort 所以它检查 item_list 中的每个元素,并检查该元素是否包含 sort 中的任何元素。如果没有,它会将元素添加到字典中。

您需要检查排序中的每个项目是否在每个单词中不将元组与每个单词进行比较,这正是 if not sort in word 正在做的事情:

from collections import defaultdict

items = defaultdict(int)
for word in item_list:
    if not any(ele in  word for ele in srt):
        items[word] += 1

值得添加,因为它实际上回答了所问的问题。正如@JonClements 建议的那样,只需使用 Counter dict:

from collections import Counter
items = Counter(item for item in item_list if not any(word in item for word in sort)) 

使用 defaultdict 无需检查 if word in items

>>> item_list = ["Non-Tradable Ubersaw", "Screamin' Eagle", "'Non-Craftable Spy-cicle"]
>>> not_allowed = {"Non-Tradable", "Non-Craftable"}

您可以使用带有 any 的列表理解来检查当前元素中是否存在任何不允许的子字符串

>>> filtered = [i for i in item_list if not any(stop in i for stop in not_allowed)]
>>> filtered
["Screamin' Eagle"]

我知道您正在使用 python,但是如果文件真的 很大,一个好的优化方法是使用一些较低级别的命令,例如 bash。就像这个单行一样简单:

$ grep "text you are searching" my_file.txt | sort

当然,如果需要,可以使用 subprocess 模块从 python 执行此 bash 代码。

同样,只有在文件很大且性能优化很重要的情况下才值得这样做。 bash 命令将比简单的 python 循环更快地完成工作。

希望对您有所帮助。