python - 定义列表时有条件地将项目添加到列表中?

标签 python list python-3.x list-comprehension

有没有办法在定义列表时有条件地将项目添加到列表中? 这就是我的意思:

l = [
    Obj(1),
    Obj(2),
    Separator() if USE_SEPARATORS,
    Obj(3),
    Obj(4),
    Obj(5),
    Separator() if USE_SEPARATORS,
    Obj(6)
]

显然上面的代码是行不通的,请问有没有类似的方法呢?

目前我有

l = [item for item in (
        Obj(1),
        Obj(2),
        Separator() if USE_SEPARATORS,
        Obj(3),
        Obj(4),
        Obj(5),
        Separator() if USE_SEPARATORS,
        Obj(6)
) if not isinstance(item, Separator) or USE_SEPARATORS]

但我想知道是否有其他方法不需要遍历列表,因为它们可能有 10 000 个项目,并且在我执行代码时服务器会停止四分之一秒左右。 它适用于第一人称射击游戏,因此四分之一秒实际上可能会对某人的生死产生影响。

最佳答案

另一种方法是使用 splat/unpacking 运算符将元素展开为分隔符或什么都不展开:

possible_separator = (Separator(),) if USE_SEPARATORS else ()
l = [
    Obj(1),
    Obj(2),
    *possible_separator,
    Obj(3),
    Obj(4),
    Obj(5),
    *possible_separator,
    Obj(6)
]

关于python - 定义列表时有条件地将项目添加到列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878602/

相关文章:

python - 检查列表中的任何值是否存在于句子中

python - 每次更新时将 turtle 移动到稍微靠近随机坐标的位置

python - STDIN 文件读取查询

python-3.x - 如何在 cv2.findcontours 上获得准确的结果以在 BW/黑白图像中查找对象?

Python - 循环遍历不同文件夹中的文件

python - NumPy 将 np.dot 或 np.multiply 的输出添加到现有数组

list - 在 Flutter/Dart 中映射多个列表?

python - 我需要访问 Python 中的元组

python - 为什么不列出属于某个类的对象?

python - 如何在 Dataframe 的行级别应用计算?