【发布时间】:2016-02-08 00:16:14
【问题描述】:
我为糟糕的标题道歉。不确定如何准确地表达我的问题。
我有下面的代码,它使用一个名为propadd 的元组列表。 if statement 测试元组的匹配条件。如果匹配只匹配到元组列表中的 1 个元组,它会执行与 if 语句中完全相同的代码,以便将此匹配的元组分配给变量 v,以便使用来自此匹配元组的值更新游标行。我想知道是否有办法摆脱在 if 语句之后将完全相同的代码分配给 v 的方法。在检查匹配长度时,是否可以在 if 语句中将列表分配给 v ?这是遵循此方法的大量代码的一部分。我相信这样做会让我的代码更快。
if len([item for item in propadd if item[0]==row1[8] and harversine(custx,custy,item[2],item[3])<1500]) == 1:
v=[item for item in propadd if item[0]==row1[8] and harversine(custx,custy,item[2],item[3])<1500]
row1[1]=v[0][1]
row1[2]=v[0][2]
elif len([item for item in custadd if item[0]==row1[4]]) == 1:
k=[item for item in custadd if item[0]==row1[4]]
row1[1]=k[0][1]
row1[2]=k[0][2]
elif len([item for item in numlist if re.search(r"^[0-9]+(?=\s)",row1[0]) is not None and item[0]==re.search(r"^[0-9]+(?=\s)",row1[0]).group()]) == 1
m=[item for item in numlist if re.search(r"^[0-9]+(?=\s)",row1[0]) is not None and item[0]==re.search(r"^[0-9]+(?=\s)",row1[0]).group()]
row1[1]=m[0][1]
row1[2]=m[0][2]
【问题讨论】:
-
如果你想让你的代码更快,我相信使用
filter函数比list comp更快。在我打字的时候,@MadPhysicist 发布了我要说的内容:你不妨指定v然后检查len(v),这样列表组合只运行一次 -
我将研究
filter函数。谢谢。