我正在刷新我的 python (2.7),我正在发现迭代器和生成器。 据我所知,它们是一种在不消耗太多内存的情况下浏览值的有效方法。 所以下面的代码对列表进行某种逻辑索引: 删除触发此处由函数 f 表示的 False 条件语句的列表 L 的值。
我对我的代码不满意,因为我觉得这段代码不是最优的,原因有以下三个:
我在某处读到,使用 for 循环比使用 while 循环更好。 但是,在通常的
for i in range(10)
中,我无法修改“i”的值,因为似乎迭代并不关心。逻辑索引在面向矩阵的语言中非常强大,应该有一种方法可以在 python 中执行相同的操作(手动授权,但可能比我的代码更好)。
第三个原因是我想在这个例子中使用生成器/迭代器来帮助我理解。
第三个原因是我想在这个例子中使用生成器/迭代器来帮助我理解。
TL;DR:这段代码是一种很好的 pythonic 方式来进行逻辑索引吗?
#f string -> bool
def f(s):
return 'c' in s
L=['','a','ab','abc','abcd','abcde','abde'] #example
length=len(L)
i=0
while i < length:
if not f(L[i]): #f is a conditional statement (input string output bool)
del L[i]
length-=1 #cut and push leftwise
else:
i+=1
print 'Updated list is :', L
print length
最佳答案
这段代码有一些问题,但最主要的是您绝不能修改正在迭代的列表。相反,您从符合条件的元素创建一个新列表。这可以简单地在 for 循环中完成:
newlist = []
for item in L:
if f(item):
newlist.append(item)
可以简化为简单的列表理解:
newlist = [item for item in L if f(item)]
关于python - 这个条件删除的更好的 pythonic 版本是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35436054/