我有一些代码正在通过嵌套循环运行。我猜测还有更多" pythonic"这样做的方式。有什么建议?
代码的基本部分如下所示:
for e in range(len(listOfTuples)):
for item in self.items:
if item.getName() == listOfTuples[e][0]:
<do stuff>
if item.getName() == listOfTyples[e][1]:
<do other stuff>
continue
if <both above if statements got answers>:
<do yet more stuff>
有没有更好的方法来编写这些嵌套循环?
答案 0 :(得分:0)
您可以使用生成器功能。至少它隐藏了&#34;丑陋&#34;嵌套for循环给你。
def combine_items_and_tuples(items, listOfTuples):
for e in range(len(listOfTuples)):
for item in items:
yield e, item
只需用:
来调用它for e, item in combine_items_and_tuples(self.items, listOfTuples):
if item.getName() == listOfTuples[e][0]:
<do stuff>
if item.getName() == listOfTyples[e][1]:
<do other stuff>
continue
if <both above if statements got answers>:
<do yet more stuff>
正如评论中已经提到的,你也可以直接迭代listOfTuples
,因为它是可迭代的(看看python glossary):
for tuple in listOfTuples:
答案 1 :(得分:0)
直接在listOfTuples
上迭代并解压缩我们关心的值
for a, b, *_ in listOfTuples:
a_check, b_check = False, False
for item in self.items:
if item.name == a:
#do stuff
a_check = True
if item.name == b:
#do stuff
b_check = True
if a_check and b_check:
#do more stuff
*_
捕获listOfTuples
中元组前两个元素的内容(假设我们想要的只是前两个元素)。
请注意,我使用item.name
代替item.getName
。 Python通常不关心getter和setter,因为私有变量没有真正的概念。