2016-10-09 66 views
0

我想返回包含在特定列特定的子列表的所有子列表:一行Python代碼,返回包含特定字符串列表的所有子列表中particluar列

對於如:

List=[["2006ab","2005ac"],["2005ab","2004ac"],["2006ab","2005ac"],["2006ab","2003ac"],["2006ab","2005ac"]] 

搜索標準:返回包含第二個索引處的substring 2005的所有子列表。

輸出:

[["2006ab","2005ac"],["2006ab","2005ac"],["2006ab","2005ac"]] 

我試着使用:

matching = [s for s in List if "2005" in s[1]] 

但它返回:

[["2006ab","2005ac"],["2005ab","2004ac"],["2006ab","2005ac"],["2006ab","2005ac"]] 
+0

肯定的,但2005年可能是在第0子表的索引以及,BT我的目的是要返回所有的子表,只有當它包含了2005年在次級列表的第一個索引。 –

+0

再次運行它。你的代碼沒有問題。 –

+0

你的代碼給出了正確的結果。 '[s for s in if if'2005'in s [1]]''給出'[['2006ab','2005ac'],['2006ab','2005ac'],['2006ab','2005ac'] ]'。 – MisterMiyagi

回答

1

你的列表中理解的做法是好的,並給出正確的結果。你確定你的代碼與你粘貼輸出的代碼是一樣的,因爲它適用於我:

>>> List=[["2006ab","2005ac"],["2005ab","2004ac"],["2006ab","2005ac"],["2006ab","2003ac"],["2006ab","2005ac"]] 
>>> [sublist for sublist in List if '2005' in sublist[1]] 
[['2006ab', '2005ac'], ['2006ab', '2005ac'], ['2006ab', '2005ac']] 

它與你所期望的相同。

如果您正在尋找替代方案,你可以使用filter()

>>> filter(lambda x: '2005' in x[1], List) 
[['2006ab', '2005ac'], ['2006ab', '2005ac'], ['2006ab', '2005ac']] 
+1

與他的代碼不一樣,只是用'sublist'替換's'? – MisterMiyagi

+0

除了將's'重命名爲'sublist'之外,這與OP的代碼沒有什麼不同。你的答案是什麼? –

+0

更新了答案。由於問題沒有正確格式化,我錯過了最後一部分 –

相關問題