我有一份源代码列表,正在查找这些源代码以查找匹配的字符串并返回列表中的所有匹配项。 问题是每次找不到匹配项时,我都会得到一个空列表元素。
例如:[“ matchone”,“”,matchtwo“”,.....]
代码如下:
name_match = re.compile("\s\w+\(")
match_list = []
match_list_reformat = []
for x in range(0,30):
if name_match.findall(source_code[x]) != None:
match_list.append(gc_name_match.findall(source_code[x]))
format = "".join([c for c in match_list[x] if c is not '(']).replace("(", "")
match_list_reformat.append(format)
return match_list_reformat
使用“如果name_match.findall(source_code [x])!=无:”不会改变结果。
在旁注。如何使用此def遍历源代码的所有行? range(0,30)只是一种解决方法。
答案 0 :(得分:4)
没有re
的情况最简单,因为Python 3从过滤器返回一个迭代器,因此应包装在对list()
的调用中
>>> mylst
['matchone', '', 'matchtwo', '', 'matchall', '']
>>> list(filter(None, mylst))
['matchone', 'matchtwo', 'matchall']
filter最快。
来自文档:
filter(function,iterable)从这些元素构造一个迭代器 可迭代的函数返回true。可迭代的可能是 序列,支持迭代的容器或迭代器。如果 函数为无,则假定身份函数,即全部 错误的iterable元素将被删除。
请注意,filter(函数,可迭代)等效于生成器 表达式(如果函数,则为可迭代项的项目) 不为None和(如果项目为item,则为item项目) 没有。
答案 1 :(得分:1)
在for循环的最后一行只有一个小的更改
Traceback (most recent call last):
File "C:\Users\ascklee\AppData\Local\Programs\Python\Python37-32\Creating
Thumbnails (orientation - 4).py", line 14, in <module>
for k, v in im._getexif().items()
AttributeError: 'NoneType' object has no attribute 'items'
遍历所有源代码,将match_list_reformat.append(format) if format != '' else False
更改为range(30)