【发布时间】:2015-05-06 20:47:58
【问题描述】:
有没有办法在定义列表时有条件地将项目添加到列表中? 这就是我的意思:
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 个项目长,并且当我执行代码时服务器会停止四分之一秒左右。 这是一款第一人称射击游戏,所以四分之一秒实际上可能会对某人的生死产生影响。
【问题讨论】:
-
为什么要在函数运行时定义这些列表(它们看起来是静态的)?为什么需要时不查找常量?
-
@MartijnPieters
Obj实例实际上要复杂得多,它们因调用该函数的玩家而异,因此需要为每个加入服务器的玩家创建它们。实际上,我正在考虑一种与使用带有分隔符的列表(可能是列表的有序字典)不同的解决方案,但我想到了这一点并且很好奇并想知道一个好的解决方案,如果我需要它的话。所以基本上我只要求学习目的:)
标签: python list python-3.x list-comprehension