2024-06-28 11:38:49 发布
网友
我可以用索引来做这件事,但我认为必须有一个更干净的方法来使用列表理解。我是初学者。我希望这不会让人尴尬。谢谢
for x in firstList: firstFunc(x) secondFunc(x) x = process(x) if x.discard == True: (get rid of x) secondList.append(firstList)
几件事:
append
extend
== True
if x.discard:
所以你会得到一些线索:
tmp = [] for x in first_list: x = process(x) if not x.discard: tmp.append(x) second_list.extend(tmp)
列表理解显然更像Python,不过:
只是一个想法,对文档几乎没有帮助,但为什么不试试:
def masterFunc(x): firstFunc(x) secondFunc(x) process(x) return x.discard secondList = [ x for x in firstList if masterFunc(x) ]
好消息:严格说来,照你说的做。 坏消息:它隐藏了firstFunc、secondFunc和process
在这个例子中,您似乎已经在副作用和命令/查询分离方面遇到了麻烦,所以我认为这次黑客攻击并不像清理代码那样高尚。您可能会发现有些方法需要反转(x.firstFunc()而不是firstFunc(x)),而其他方法则需要分解。甚至还有比“x.discard”更好的方法来处理过滤。在
你知道,你最好的解决方案就是按你喜欢的方式初始化secondList,并在一个常规的循环中执行所有三个函数,因为它们都是依赖的,并且包含的逻辑不仅仅是过滤(你说进程集属性。。。我想你不是指丢弃):
# If secondList not initialized... secondList = [] for x in firstList: firstFunc(x) secondFunc(x) process(x) if not x.discard: secondList.append(x)
列表理解在这里没有太大的帮助,因为你在每个函数中进行处理(尽管它们会减少一两行;这取决于你在“干净”的代码中寻找什么)。如果all process()did在新列表中返回True,如果该项不在新列表中,则返回False,那么下面的方法会更好,IMO
如果firstFunc(x)和secondFunc(x)确实更改了x.discard after process()的结果,而process(x)的结果正好是x,那么我将在您的情况下执行以下操作:
如果过程(x)的结果与x不同,正如您的示例所示,您还可以将最后一行更改为以下内容:
interimList = [ process(x) for x in firstList ] secondList = [ x for x in interimList if not x.discard ]
请注意,如果要将这些结果附加到secondList,请使用第二个列表。扩展([...]). 在
编辑:我意识到我错误地写了“donot”change,但我的意思是如果他们真的更改process()的结果。在
编辑2:清理说明/代码。在
几件事:
append
一个列表,您需要使用extend
。在== True
位,只需使用if x.discard:
所以你会得到一些线索:
列表理解显然更像Python,不过:
^{pr2}$只是一个想法,对文档几乎没有帮助,但为什么不试试:
好消息:严格说来,照你说的做。 坏消息:它隐藏了firstFunc、secondFunc和process
在这个例子中,您似乎已经在副作用和命令/查询分离方面遇到了麻烦,所以我认为这次黑客攻击并不像清理代码那样高尚。您可能会发现有些方法需要反转(x.firstFunc()而不是firstFunc(x)),而其他方法则需要分解。甚至还有比“x.discard”更好的方法来处理过滤。在
你知道,你最好的解决方案就是按你喜欢的方式初始化secondList,并在一个常规的循环中执行所有三个函数,因为它们都是依赖的,并且包含的逻辑不仅仅是过滤(你说进程集属性。。。我想你不是指丢弃):
列表理解在这里没有太大的帮助,因为你在每个函数中进行处理(尽管它们会减少一两行;这取决于你在“干净”的代码中寻找什么)。如果all process()did在新列表中返回True,如果该项不在新列表中,则返回False,那么下面的方法会更好,IMO
如果firstFunc(x)和secondFunc(x)确实更改了x.discard after process()的结果,而process(x)的结果正好是x,那么我将在您的情况下执行以下操作:
^{pr2}$如果过程(x)的结果与x不同,正如您的示例所示,您还可以将最后一行更改为以下内容:
请注意,如果要将这些结果附加到secondList,请使用第二个列表。扩展([...]). 在
编辑:我意识到我错误地写了“donot”change,但我的意思是如果他们真的更改process()的结果。在
编辑2:清理说明/代码。在
相关问题 更多 >
编程相关推荐