2017-09-02 34 views
-1

我正在編寫學校作業的程序,我必須使用.csv文件中的數據。當我打開文件時,我讀取它,並將其保留爲未格式化(所有項目均爲字符串)。我只用逗號分開它們並在列表中創建列表。我需要找到列表中的最後一個項目(有3個列表與最後一個項目相同)。它在我的郵件程序中不起作用,所以我使用python shell來確認是否有錯誤。列表中的最後一項不計算

>>> l=[['2', '13:00', '22', '0', 'True', '5\n'], ['-1', '14:00', '22', '0', 'True', '5\n'], ['2', '15:00', '23', '0', 'True', '5\n']] 
>>> "5\n" in l 
False 
>>> "5" in l 
False 
>>> 

這是它給我的迴應。爲什麼沒有看到最後一個項目?爲什麼有這種不需要的「新行」字符?格式化的版本顯示爲5(整數),因此它顯然存在。

+0

這不是列表中的項目。這是列表中項目的一個項目。 – user2357112

+0

它沒有看到任何項目。 l'中的'2'也不起作用。 –

+0

'in'不是可傳遞的。 – user2357112

回答

2

你的測試將工作對於任何子項目,例如:

>>> '2' in l 
False 

x in y檢查直接會員。所以它應該工作,如果你會問:

>>> ['2', '13:00', '22', '0', 'True', '5\n'] in l 
True 

如果你想檢查級別的會員,您可以使用:

any("5\n" in li for li in l) 

這是True

>>> any("5\n" in li for li in l) 
True 
0

您有清單列表。這意味着您必須先索引父列表,然後才能檢查項目是否在子列表中。

'5\n' in l[2] 

l[2]訪問第3項(因爲索引是從0開始在Python)在列表中。第三項本身就是一個清單,然後你可以到in檢查。

如果您希望能輕鬆地在列表清單上執行in檢查,那麼您的運氣不好。你需要編寫一個循環遍歷父列表中的每個項目,然後檢查每個子列表中的in,直到找到匹配項。

found = False # track whether we found something or not 
for child in l: 
    if '5\n' in child: 
     found = True 
     break # we found it, no need to keep looping 

if found: 
    # if we found something, do something 
+0

'l [3]'訪問列表中的第四個*項,而不是第三個。 – cdarke

+0

@cdarke謝謝,我很匆忙和錯誤的計數。 – Soviut

1

如果你希望所有過去的項目列表,你可以做一個簡單的列表理解:

last_items = [m[-1] for m in l] 

演示:

>>> last_items = [m[-1] for m in l] 

>>> last_items 
['5\n', '5\n', '5\n'] 
+1

清潔,簡單的解決方案。如果OP只需要知道他們的存在,那麼你可以在任何(m [-1] =='5 \ n'爲m中的l')或者在每個子列表中存在:'[m [ - [ 1] =='5 \ n'for m in l]',或for all sublists:'all(m [-1] =='5 \ n'for m in l)':-) –

+0

謝謝您添加那! :) –

0
m=list(zip(*l)[-1]) # last column 
if "5\n" in m: 
     ...     
+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/17218842) –