如果列表中存在字符串,则创建列表/从列表中删除行

时间:2016-07-12 14:13:39

标签: python list

我有

形式的二维字符串列表
data = [['DAL', "Luna's", 'Dallas', 'TX', '75235-3013', 'US', 40162.0, 'CFSAN', 'Pesticides and Chemical Contaminants'],
        ['DAL', "Luna's", 'Dallas', 'TX', '75235-3013', 'US', 41033.0, 'CFSAN', 'Foodborne Hazards']]

如果我的列表中的一行包含“食物”字符,例如食物性危害,我希望将其从列表中删除。这可以是从列表中删除行,也可以是创建新列表(如果它不包含“Food”)。

我尝试列出下面的列表理解,但它没有用。

filtered_data = [[data[i,j] for j in range(len(data[0]))] for i in range(len(data)) if 'Food' in data[i,:]]

有人能引导我朝正确的方向前进吗?

3 个答案:

答案 0 :(得分:3)

这是filter的工作。理解可以做同样的伎俩,但我发现map/filter/reduce总是更容易阅读代码:

def my_food_filter(inner_list):
    return not any(['Food' in str(p) for p in inner_list])

foodless_list = filter(my_food_filter, data)

答案 1 :(得分:2)

[[y for y in x if 'Food' not in str(y)] for x in data]

输入:数据 输出:

[['DAL', "Luna's", 'Dallas', 'TX', '75235-3013', 'US', 40162.0, 'CFSAN', 'Pesticides and Chemical Contaminants'], ['DAL', "Luna's", 'Dallas', 'TX', '75235-3013', 'US', 41033.0, 'CFSAN']]

如果您要删除包含' Food'的列表,请尝试以下操作:

[x for x in data if 'Food' not in str(x)]

输出:

[['DAL', "Luna's", 'Dallas', 'TX', '75235-3013', 'US', 40162.0, 'CFSAN', 'Pesticides and Chemical Contaminants']]

答案 2 :(得分:1)

thelist[:] = [x for x in thelist if 'Food' not in str(x)]
当你在列表上进行迭代时,你可以使用它 - 你永远不会出现索引错误

为两个嵌套列表添加信息 - 您的情况:

for singlelist in data:
    singlelist[:] = [x for x in singlelist if 'Food' not in str(x)]
print data