python - re.finditer() 返回的迭代可迭代对象与在迭代之前将其类型转换为列表之间有什么区别。PYTHON
问题描述
我正在解决关于hackerrank 的问题python 问题。我遇到了以下代码通过的问题:
import re
s = input()
ss = input()
o = list(re.finditer(r'(?=' + ss + ')', s))
if o:
for i in o:
print((i.start() , i.start() + len(ss) - 1))
else:
print((-1, -1))
但是以下一个失败了:
import re
s = input()
ss = input()
o = re.finditer(r'(?=' + ss + ')', s)
if o:
for i in o:
print((i.start() , i.start() + len(ss) - 1))
else:
print((-1, -1))
您可以在第四行看到差异。我无法理解两者之间的区别。
解决方案
如果列表为空,则列表将评估为 False,如果不是,则评估为 True。
因此,如果是空列表if
,则不会输入:o
if o:
一个迭代器在被消费之前不知道它是否为空,所以它总是真的。
参见例如:
list1 = []
list2 = [0]
iter1 = iter(list1)
iter2 = iter(list2)
>>> bool(list1)
False
>>> bool(list2)
True
>>> bool(iter1)
True
>>> bool(iter2)
True
推荐阅读
- getgauge - 如何根据输入的标签顺序运行规范
- sql-server - 比较 4 个数据库与分布式数据库
- python - 如何使用 pytest 固定装置和 django 在 unittest 中创建类似于“setUp”的方法
- javascript - 无法使用我的 JS 代码在浏览器中压缩图像
- pyspark - 如何在pyspark中的groupby之后对组中的每一行应用函数?
- python - 使用 Scrapy 遍历表行
- javascript - 乘以字符串的点
- sql - SSRS 不显示列和值
- objective-c - Objective-C,scheduledTimerWithTimeInterval 渐进式增加
- javascript - 如何检查js数组中是否存在字符串?