真的卡在这里,需要一些建议....
我有一个清单......
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项与组中的最后一项相同,如果是,那么它应该删除该列,这显然不理想,因为它忽略了中间的项目。
有什么建议吗?
答案 0 :(得分:0)
>>> 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', '*')]
>>>
如果您想了解更多内容,请参阅any
和str.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]