2016-07-12 28 views
0

存在我在形式創建列表/從列表中移除一行,如果一個字符串列表

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

如果在我的列表中的行包含字符「食品」的字符串的二維表,例如在這種情況下,食源性危害,我希望它從名單中消除。這可以通過從列表中刪除行或通過創建新列表(如果它不包含「食物」)來實現。

我試過在下面列出列表理解,但沒有奏效。

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

有人可以引導我在正確的方向嗎?

+0

很確定你想要*清除*從列表中。 –

+0

@DanHydar oops。接得好。 – Jstuff

回答

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) 
+0

'函數'對象是不可迭代的 –

+1

@OhadtheLad嘿,很好的捕獲,我顛倒了params來過濾。再試一次,是嗎?這是「直接編碼」到SO的結果。 – smassey

+0

@smassey foodless_list永遠不會被聲明。是否因爲應在最後一行傳入my_food_filter?另外,回報究竟發生了什麼?我從來沒有見過它。謝謝 – Jstuff

1
thelist[:] = [x for x in thelist if 'Food' not in str(x)] 

U可以使用此同時ü遍歷列表 - u'd永遠走不出指數錯誤的

增加信息的兩個嵌套lists-你的情況:

for singlelist in data: 
    singlelist[:] = [x for x in singlelist if 'Food' not in str(x)] 
print data 
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']] 

,如果你想刪除列表中包含「食物',試試這個:

[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']] 
+0

我希望它刪除刪除整個字符串,如果字符串中的任何列中存在字符串。我嘗試了你的方法,它只刪除了包含'Food'的字符串列 – Jstuff

+0

上面列表的最終結果是['DAL','Luna's','Dallas','TX','75235-3013' ,'美國',40162.0,'CFSAN','農藥和化學污染物'] – Jstuff

+0

在這種情況下'[[x for data in data if'Food'not in str(x)]] –