2013-10-25 29 views
0

真的被困在這裏,需要一些建議,請....刪除列,如果項目不包含一些

我有一個列表...

transposedlist = [('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('-', '*', '*', '*'), ('1', '3', '3', '*'), ('-', ' ', ' ', '*'), 

各組在上述transposedlist代表Matrix中的一列。

我想刪除任何包含NO號的組。

繼承人我嘗試迄今...

for i, group in enumerate(Listoflists): 
    if "-" in group[1:] == group[:-1] or "*" in group[1:] == group[:-1] or group[1:] None == group[:1]: 
     Matrix.DeleteColumn(i) 

上述第1項的檢查的代碼是一樣的組中的最後一個項目,如果是,那麼它應該刪除之列,這是顯然不理想,因爲它忽略了中間的項目。

有什麼建議嗎?

+0

說你想刪除您要添加更多的混亂的問題列。你真正想要的是從'transposedlist'中刪除* rows *。它代表的是一個矩陣,它是原始矩陣的轉置,這與問題無關。 – vartec

回答

0

使用any() function引用:

transposedlist = [entry for entry in transposedlist if any(e.isdigit() for e in entry)] 

any()這裏的函數返回True,如果在可迭代(這裏是一個生成器表達式)中有任何值,則爲True,否則爲False。如果表達式(e.isdigit() for e in entry)僅產生False那麼entry將不包含在新列表中。

演示:

>>> transposedlist = [('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('-', '*', '*', '*'), ('1', '3', '3', '*'), ('-', ' ', ' ', '*')] 
>>> any(e.isdigit() for e in transposedlist[0]) 
True 
>>> any(e.isdigit() for e in transposedlist[3]) 
False 
>>> [entry for entry in transposedlist if any(e.isdigit() for e in entry)] 
[('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('1', '3', '3', '*')] 
0

嘗試list-comprehension

>>> transposedlist = [('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('-', '*', '*', '*'), ('1', '3', '3', '*'), ('-', ' ', ' ', '*')] 
>>> newlist = [x for x in transposedlist if any(y.isdigit() for y in x)] 
>>> newlist 
[('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('1', '3', '3', '*')] 
>>> 

如果你想了解更多,這裏有一個列表解析保持條目用數字而不是在anystr.isdigit

0
import re 
import string 

transposedlist = [('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('-', '*', '*', '*'), ('1', '3', '3', '*'), ('-', ' ', ' ', '*')] 

newlist = [x for x in transposedlist if re.search("[0-9]",string.join(x,"")) is not None] 
相關問題