python - 从列表中删除等于数字的项目 从由字符串和数字组成的列表中删除

标签 python

我有一个以下结构的列表,为了这个问题的目的而简化了:

x = ["f","f","f",0,"f",0,0,0"f","f"]

其中“f”代表字符串形式的文件路径。我想做的是从列表中删除所有等于零的元素。我试过像这样迭代:

for h in range(len(x)):
    if x[g] == "0":
        del x[g]
    else:
        pass

这没有用,因为从正在迭代的列表中删除是行不通的,而且列表理解似乎是我正在寻找的答案,但我似乎无法降低格式:

x = [h for h in range(len(x)) if h != 0]

所以我最终想要的输出是:

x = ["f","f","f",f","f",f"]

我该如何实现这一目标?

编辑:帕特里克在下面的评论中的回答正是我所寻找的并解决了这个问题。

最佳答案

我还要注意,在 x 是一个大列表的情况下,您可能希望在列表过滤后返回迭代器,因为在大型数据集上使用迭代器可能会提高性能(参见 Performance Advantages to Iterators?了解更多信息)。 在这种情况下,您可以使用内置的 filter(function, iterable) 函数,它将在 Python 3 中返回迭代器。

x = ["f","f","f",0,"f",0,0,0,"f","f"]
for ch in filter(lambda sym: sym != 0, x):
    print(ch)

因此,只有不等于 0 的元素才会被打印出来。 请参阅 https://docs.python.org/3/library/functions.html#filter 以获取有关内置过滤器的更多信息。

另一种方法是使用生成器理解。这里要注意的是,您只能迭代生成器一次。但是您也会有一些好处,每个结果都将在运行中进行评估和产生,因此您可以通过使用生成器表达式来节省内存。

只需使用此示例即可使用生成器理解:

x = ["f","f","f",0,"f",0,0,0,"f","f"]
for ch in (sym for sym in x if sym !=0):
    print(ch)

在此处查看更多生成器理解示例和优势 https://www.python.org/dev/peps/pep-0289/

也可以通过真值测试来准确过滤结果。

Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false:

  • 没有
  • 错误
  • 任何数字类型的零,例如 0、0.0、0j。
  • 任何空序列,例如,''、()、[]。
  • 任何空映射,例如 {}。
  • 用户定义类的实例,如果该类定义了 bool() 或 len() 方法,当该方法返回整数零或 bool 值 False 时。

所以表达式 [sym for sym in x if sym] 将从结果中删除所有 False 符号(即 False、'' 等)。因此,使用真值测试要准确(有关详细信息,请参阅 https://docs.python.org/3.6/library/stdtypes.html#truth-value-testing)。

关于python - 从列表中删除等于数字的项目 从由字符串和数字组成的列表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44525890/

相关文章:

python - 有没有办法使用 tensorflow 对象检测从扫描图像中识别标题和段落?

python - 同时更新多个标签时 Tkinter 没有响应

python - sklearn : Using pretrained hyperparameters Gaussian Process Regression

python - 如何使用 Homebrew 在 OS X 上安装 Python 3.3(不是 3.4)?

python - 自动更新Python类属性的最佳方法

python - 如何中断在 emacs 中打开的 IPython 解释器?

python - unix shell 脚本中的子进程性能不佳

python - 正在从视频.avi文件中读取文件

Python : dosomethinghere(). dependent().on().thismethod()?

python - 处理每个类方法的调用