我必须创建一个元素数量可变的元组(或数组)。给出这个最小的例子:
def do_something(foo: str):
my_tuple = (
"item",
*([foo] if foo is not None else []),
"something"
)
...
我想知道,是否有比使用扩展运算符表达式
*([foo] if foo is not None else [])
更短的方法可以在元组中选择性地添加元素?请注意,使用 if 语句不是创建不同元组的选项。执行时间也可以忽略,优先考虑最小化代码和冗余。
首先允许
None
位于元组中,然后向下过滤。
def do_something(foo: str):
my_tuple = (
"item",
foo,
"something"
)
return tuple(filter(bool, my_tuple))
是否有比使用扩展运算符更短的方法
*([foo] if foo is not None else [])
是的,可以按照以下方式完成
foo = "foo"
my_tuple = ("item",*[foo][:foo is not None],"something")
但更难理解。它利用了 boolean-as-integer 技巧,该技巧用于确定是否使用列表的 0 或 1 长前缀,在前一种情况下,这会导致空列表。