如果项目不包含数字,请删除列

时间:2013-10-25 16:09:51

标签: python list matrix

真的卡在这里,需要一些建议....

我有一个清单......

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

上面的转置列表中的每个组代表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项与组中的最后一项相同,如果是,那么它应该删除该列,这显然不理想,因为它忽略了中间的项目。

有什么建议吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用带有列表理解的any() function 保留条目而不是数字:

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

any()函数返回True,如果iterable(此处为生成器表达式)中有任何值,则为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', '*')]

答案 2 :(得分: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]