python 遍历列表表达多if,使用if和break嵌套for循环创建Python列表理解

博客讨论了如何优化涉及多边形包含检查的代码,目标是创建一个与输入点数量相等的新列表。原始代码使用嵌套for循环和break语句,但尝试转换为列表推导以提高效率。然而,转换后的列表推导没有正确实现break的行为,导致结果长度不足。问题包括:1) 列表推导是否值得;2) 如何在列表推导中模拟break;3) 使用next()函数时的错误。博客寻求解决方案以保持性能并正确实现逻辑。
摘要由CSDN通过智能技术生成

我注意到从

this回答该代码

for i in userInput:

if i in wordsTask:

a = i

break

可以通过以下方式编写为列表推导:

next([i for i in userInput if i in wordsTask])

我有一个类似的问题,我想在列表理解方面编写以下(从原始问题简化)代码:

for i in xrange(N):

point = Point(long_list[i],lat_list[i])

for feature in feature_list:

polygon = shape(feature['geometry'])

if polygon.contains(point):

new_list.append(feature['properties'])

break

我希望每个点都与要素列表中的单个多边形相关联.因此,一旦找到包含该点的多边形,则使用break来移动到下一个点.因此,new_list将具有正好N个元素.

我把它写成列表理解如下:

new_list = [feature['properties'] for i in xrange(1000) for feature in feature_list if shape(feature['geometry']).contains(Point(long_list[i],lat_list[i])]

当然,这并没有考虑if语句中的中断,因此比使用嵌套for循环要花费更长的时间.使用上面链接的帖子(我可能不完全理解)的建议,我做到了

new_list2 = next(feature['properties'] for i in xrange(1000) for feature in feature_list if shape(feature['geometry']).contains(Point(long_list[i],lat_list[i]))

但是,new_list2比N个元素少得多(在我的例子中,N = 1000,new_list2只有5个元素)

问题1:作为列表理解,这甚至值得吗?唯一的原因是我读到列表理解通常比嵌套for循环快一点.每秒有200万个数据点.

问题2:如果是这样,我如何在列表理解中加入break语句?

问题3:以我的方式使用next时出现的错误是什么?

非常感谢你的时间和善意的帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值