为什么无法访问matcch的第四个元素?
遍历matcch的时候matcch的第四个元组没被访问?
我记得Python的for in语句也是用迭代器实现的。
使用迭代器的时候,最好是不要修改容器的,至少不要修改其大小,否则容易出现无法预料的结果。
Python迭代器的底层原理没研究过,不过你这肯定是因为第三个元素被删除后导致后续迭代出现意外。
如果非要修改容器的话,可以尝试使用普通的循环结构(for/while)
除了开头和结尾处的print(matcch)中间只有三个输出,而且没有循环结构(除for),当然只会输出符合条件的三个元素
用remove()确实有问题,实在不行,可以另外创建一个空列表,将满足条件的添加到新列表。
import re
regex = re.compile(r'''
([0-3]?[0-9])/ # date
([0-1]?[0-9])/ # month
([1-2]?[0-9][0-9][0-9]) # year
''', re.VERBOSE)
match = regex.findall('25/08/2022 26/8/2022 32/11/2022 30/02/2022')
list1 = []
for i in match:
day, month, year = int(i[0]), int(i[1]), int(i[2])
if month in [1, 3, 5, 7, 8, 10, 12]:
print(i, '1')
if 1 <= day <= 31:
list1.append(i)
elif month in [4, 6, 9, 11]:
print(i, '2')
if 1 <= day <= 30:
list1.append(i)
elif month == 2:
print(i, '3')
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
if 1 <= day <= 29:
list1.append(i)
else:
if 1 <= day <= 28:
list1.append(i)
print(list1)
# ('25', '08', '2022') 1
# ('26', '8', '2022') 1
# ('32', '11', '2022') 2
# ('30', '02', '2022') 3
# [('25', '08', '2022'), ('26', '8', '2022')]