繁体   English   中英

这段代码可以更简单吗? 哪个代码看起来更好? [反向循环]

[英]Can this code be more simple? Which code looks better? [Reversed Loop]

您能否使代码1)比现在更简单?

还是有更好的方法?

我编写了这两个非常简单的代码,只是为了可视化差异。

在我看来,代码1)比2)更清晰,尤其是在循环实现更多内容时,例如字典列表。

1)用于拉链

shopping_list =['bananas', 'car', 'rum', 'cat', 'meat', 'jelly']
for i, item in zip(range(len(shopping_list)-2, -1, -1), shopping_list):
    print(i, item)
    if item == 'cat':
        shopping_list.pop(i)

print()

2)仅用于

shopping_list =['bananas', 'car', 'rum', 'cat', 'meat', 'jelly']
for i in range(len(shopping_list)-1, -1, -1):
    print(i, shopping_list[i])
    if shopping_list[i] == 'cat':
        shopping_list.pop(i)

循环的结果是:

['bananas', 'rum', 'meat', 'jelly']

您无需修改​​原始列表即可删除不满足条件的单词,您似乎在前两种方法中都这样做。

相反,您可以使用过滤器根据条件word != 'cat'删除元素

shopping_list =['bananas', 'car', 'rum', 'cat', 'meat', 'jelly']
print(list(filter(lambda x: x != 'cat', shopping_list)))

输出将是

['bananas', 'car', 'rum', 'meat', 'jelly']

您的解决方案不好,因为不必要的复杂性,并且因为您在循环访问列表时修改了列表(这很棘手)。

使用任一列表推导 (如注释中所述):

shopping_list = [w for w in shopping_list if w != 'cat']

filter方法:

shopping_list  = list(filter(lambda x: x != 'cat', shopping_list))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM