python - 这个条件删除的更好的 pythonic 版本是什么?

标签 python indexing

我正在刷新我的 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/

相关文章:

javascript - 如何从使用 javascript 生成的工具提示中抓取文本

python - 在 Python 请求 get 或 post 方法上干净地设置 max_retries

Android 2.3 上的 Android sqlite 索引

sql-server - 慢更新与慢选择

python - OpenERP - 报告创建

python - TypeError : 'str' object is not callable with input()

python - 将包含单个数字的列表转换为整数

Python查找列表中元素的索引并在另一个列表中删除

r - 拆分数据框中列的字符以在 R 中的值之间插入下划线

git 状态给我一个错误 : bad index file sha1 signature