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