关于正则中finditer输出的一个疑问

for index, row in train_set.iterrows():

S = str(row['描述'])
M = re.finditer(match_target, S)
part_index_list = [(m.start(), m.start() + len(m.group()) - 1) for m in M]
part_list = [m.group() for m in M]

run后,part_index_list列表正常有值,part_list一直为空,理论上part_index_list应该是与part_list相对应的,同时空或者同时非空,结果似乎不太科学,请指点.

阅读 2.1k
2 个回答

因为在给part_index_list赋值的时候已经消耗掉了生成器M中的元素,所以在给part_list赋值时,M中已经没有元素了。

原因@pein已经给出.
针对除了再finditer一次外还有什么更好的方法呢?, 可以这样做:

part_index_list = []
part_list = []
for m in M:
    part_index_list.append((m.start(), m.start() + len(m.group()) - 1))
    part_list.append(m.group())

或者:

part_tuple = [((m.start(), m.start() + len(m.group()) - 1), m.group()) for m in M]
part_index_list, part_list = zip(*part_tuple)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题