Python 如何将此循环转换为列表?

Python 如何将此循环转换为列表?,python,list-comprehension,nested-loops,Python,List Comprehension,Nested Loops,我试图用嵌套的if语句将这个循环转换为python中的列表理解。我想我在理解列表中的模式时遇到了困难。对于上下文,下面的循环扫描一个名为ibi_a的数组,如果它扫描的每个索引的值小于变量antStart,则会增加行数 rowCount = 0 for row in range(0,len(ibi_a)): if ((float(ibi_a[row][timeStampCol])) < antStart): rowCount = rowCount+1 #increas

我试图用嵌套的if语句将这个循环转换为python中的列表理解。我想我在理解列表中的模式时遇到了困难。对于上下文,下面的循环扫描一个名为ibi_a的数组,如果它扫描的每个索引的值小于变量antStart,则会增加行数

rowCount = 0
for row in range(0,len(ibi_a)):
    if ((float(ibi_a[row][timeStampCol])) < antStart):
        rowCount = rowCount+1 #increase rowCount to search for index of antStart
rowCount=0
对于范围(0,len(ibi_a))中的行:
如果((浮动(ibi_a[row][timeStampCol])
我尝试了以下代码,但没有成功

rowCount = 0
rowCount = [rowCount+1 for row in range(0,len(ibi_a)) if ((float(ibi_a[row][timeStampCol])) < antStart]
<代码>行计数=0 rowCount=[rowCount+1用于范围(0,len(ibi_a))中的行,如果((float(ibi_a[row][timeStampCol])
这不是列表理解的适当用法。顾名思义,它们用于生成列表;您要做的是有条件地增加一个变量。请坚持使用for循环。

这不是列表理解的适当用法。顾名思义,它们用于生成列表;您要做的是使用c有条件地增加一个变量。坚持使用for循环。

您不会增加列表中的计数;您只需列出符合您条件的所有项目,并检查列表的长度:

rowCount = len([i for i in ibi_a if float(i[timeStampCol]) < antStart])
rowCount=len([i为i,在ibi_a中为i,如果为float(i[timeStampCol])

另一方面,除非你有特定的理由去创建一个
范围
和一个计数器变量(
),否则最好在ibi_a
中循环
i,即使是在你原来的
for
循环中。我会为
i
选择一个更合适的变量名,但我不知道什么是“ibi_a”表示或其元素表示的内容。

您不会在列表理解中增加计数;您只需列出符合您条件的所有项目,然后检查列表的长度:

rowCount = len([i for i in ibi_a if float(i[timeStampCol]) < antStart])
rowCount=len([i为i,在ibi_a中为i,如果为float(i[timeStampCol])

另一方面,除非你有特定的理由去创建一个
范围
和一个计数器变量(
),否则最好在ibi_a
中循环
i,即使是在你原来的
for
循环中。我会为
i
选择一个更合适的变量名,但我不知道什么是“ibi_a”表示或其元素表示的内容。

列表理解用于生成列表,而这不是您的
for
循环所做的。如果需要,您可以这样做:

rowCount = sum((float(row[timeStampCol]) < antStart) for row in ibi_a)
rowCount=sum((对于ibi_a中的行,float(row[timeStampCol])

充当布尔值的计数。

列表理解用于生成列表,而这不是
for
循环所做的。如果需要,可以这样做:

rowCount = sum((float(row[timeStampCol]) < antStart) for row in ibi_a)
rowCount=sum((对于ibi_a中的行,float(row[timeStampCol])

作为布尔值的计数。

同意Daniel的观点,有时列表理解可能会被滥用,以获得更好的速度。通常的“漂亮”与“更快”,但当然,要确保更快,您需要计时。 我对一个类似的循环进行了建模,并在listcomp和loop上做了台架标记,在本例中得到了几乎相同的计时。所以我认为最好将它作为一个循环。 安静有趣的运动

import random

l = [random.randrange(1, 100) for i in xrange(10000000)]
antStart = 30
def listcomp():
    rowCount = len([i for i in l if i < antStart])

def usingLoop():
    rowCount = 0
    for i in l:
        if i < antStart:
            rowCount = rowCount+1 

import timeit
print "list comp : ",timeit.timeit(listcomp, number=100)
print "loop : ",timeit.timeit(usingLoop, number=100)

在这种特定情况下,您可以看到,列表增长越大,列表分配中的开销就超过了通常更快的列表理解循环速度。

同意Daniel的观点,有时列表理解会被滥用,以获得更好的速度。通常的“漂亮”与“更快”,但当然是fas你需要给它计时。 我对一个类似的循环进行了建模,并在listcomp和loop上做了台架标记,在本例中得到了几乎相同的计时。所以我认为最好将它作为一个循环。 安静有趣的运动

import random

l = [random.randrange(1, 100) for i in xrange(10000000)]
antStart = 30
def listcomp():
    rowCount = len([i for i in l if i < antStart])

def usingLoop():
    rowCount = 0
    for i in l:
        if i < antStart:
            rowCount = rowCount+1 

import timeit
print "list comp : ",timeit.timeit(listcomp, number=100)
print "loop : ",timeit.timeit(usingLoop, number=100)

在这种特定情况下,您可以看到,列表增长越大,列表分配中的开销就超过了通常更快的列表理解循环速度。

@Copperfield Oops.:@Copperfield Oops.:)