python - 如何在 python 中遍历列表时删除 None

标签 python python-3.x python-itertools

我有这两个不相等的列表,我正在使用 itertools 循环遍历它们,我正在尝试使用过滤器函数删除 List1 中生成的 None ,以便在一天结束时 a 只包含两个元素三个(算上一个)但我不断收到此错误:类型错误:NoneType 对象不可迭代

import itertools

List1  = [['a'],['b']]
List2 = ['A','b','C']

l = list(itertools.chain(*List1))
print(l)

for a, b in itertools.zip_longest((b for a in List1 for b in a),List2):
    filter(None, a)
    print(a,b)

最佳答案

不完全清楚你想要什么。据我了解问题和评论,您想使用 izip_longest 组合列表,但结果中没有任何 None 元素。

这将从列表的压缩“切片”中过滤出 None 并仅打印非 None 值。但请注意,通过这种方式您无法确定 non_none 列表中的第一个元素是否来自第一个列表或第二个或第三个。

a = ["1", "2"]
b = ["a", "b", "c", "d"]
c = ["x", "y", "z"]

for zipped in izip_longest(a, b, c):
    non_none = filter(None, zipped)
    print non_none

输出:

('1', 'a', 'x')
('2', 'b', 'y')
('c', 'z')
('d',)

顺便说一句,您的filter(None, a) 做了什么:它从您的a 中过滤None 值,即从strings "a""b"(作用不大,因为它们不包含 None 值),直到最后一个值失败,因为 None 不可迭代。此外,它无论如何都会丢弃结果,因为您没有将它绑定(bind)到变量。 filter 不会改变原始列表,但会返回过滤后的副本!

关于python - 如何在 python 中遍历列表时删除 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29548084/

相关文章:

python - 为什么格式化会导致 print() 失败?

python - 使用 python itertools.groupby 解析文本数据 block

python - 使用 itertools 根据值的变化拆分列表

python - 如何从python中的php文件中读取一个php数组

Python 导入类 Stack

python - 在 python 中按半小时间隔对文件列表进行分组

Python 回文帮助 : Count palindromes in a sentence

python - 如何比较 Python 中的两个列表并计算所有匹配项?

python - 创建具有两个值的字典时遗漏的值

python - 运行 `pip install` 的 Ubuntu 给出错误 'The following required packages can not be built: * freetype'