我试图将下面的for循环with if语句转换成一个列表
# Create dictionary to hold results
trip_counts = {'AM': 0, 'PM': 0}
# Loop over all trips
for trip in onebike_datetimes:
# Check to see if the trip starts before noon
if trip['start'].hour < 12:
# Increment the counter for before noon
trip_counts["AM"] += 1
else:
# Increment the counter for after noon
trip_counts["PM"] += 1
我试过了
[trip_counts["AM"]+=1 if trip['start'].hour <12 else trip_counts['PM']+= 1 for trip in onebike_datetimes]
但我一直收到一个syntaxerror
您可以使用列表理解(实际上,只是一个生成器表达式),但不能使用您的思维方式。构建
AM
和PM
的生成器,然后使用该生成器构建Counter
实例一个独立的演示:
如果这是您正在使用的pandas
DataFrame
,为什么不过滤值并一次对它们求和呢类似的方法可能会奏效:
编辑:我刚刚对这里给出的答案进行了一些基准测试,因为有些人认为列表理解会自动更快。
如您所见,在这种情况下,常规for循环或多或少具有最好的性能,仅通过使用
Counter
与列表理解相匹配,如这里的其他答案之一所述请注意,我稍微修改了Pandas实现,以匹配我认为数据可能的结构(即,不在数据帧中),因此在每次运行时将数据转换为数据帧可能会有更多的开销
生成此图的代码如下所示:
更清楚的是,保持你的for循环
如果你真的想利用列表理解,你可以这样做:
(如果使用此选项,则不需要初始化
trip_counts
)相关问题 更多 >
编程相关推荐