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

时间:2015-01-20 14:06:32

标签: python list contain

检查下方是否有更好的解释 我在一个逐行读取的文件中有一长串项目,我希望对其中包含特定字符串的所有项进行排序。如果单词不包含sort中的任何元素,则它将被添加到字典中。我怎么做?我已经阅读了本网站上的其他一些情况,但我只是不明白......所以这可能是重复的,但我需要有人来解释我如何做到这一点。 (是的,项目来自游戏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 中的任何元素。如果没有,则将元素添加到字典中。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

你需要检查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

答案 2 :(得分:0)

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

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

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

同样,只有文件很大并且性能优化很重要时,这才有价值。 bash命令比简单的python循环更快地完成工作。

我希望它有所帮助。