我有
形式的二维字符串列表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,:]]
有人能引导我朝正确的方向前进吗?
答案 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