Python 如何将布尔值追加到元组?
我的做法是:Python 如何将布尔值追加到元组?,python,python-3.x,Python,Python 3.x,我的做法是: def build_layers(): layers = () for i in range (0, 32): layers += (True) 但这导致了 TypeError: can only concatenate tuple (not "bool") to tuple 上下文:这应该准备调用,因此我无法选择列表。(True)不是元组 改为这样做: layers += (True, ) 最好使用发电机: (True, ) * 32 由于
def build_layers():
layers = ()
for i in range (0, 32):
layers += (True)
但这导致了
TypeError: can only concatenate tuple (not "bool") to tuple
上下文:这应该准备调用,因此我无法选择列表。(True)
不是元组
改为这样做:
layers += (True, )
最好使用发电机:
(True, ) * 32
由于元组是不可变的,因此每次连接都会创建一个新元组。最好采取以下措施:
def build_layers(count):
return tuple([True]*count)
如果需要构造元组的一些逻辑,只需在元组构造函数中使用列表理解或生成器表达式:
>>> tuple(bool(ord(e)%2) for e in 'abcdefg')
(True, False, True, False, True, False, True)
只有一个元组可以添加到元组,所以这将是一个工作代码
def build_layers():
layers = ()
for i in range (0, 32):
layers += (True,)
然而,添加元组并不是很像Python
def build_layers():
layers = []
for i in range (0, 32):
layers.append(True)
return tuple(layers)
如果真值取决于i,你可以做一个函数
def f(i):
True
def build_layers():
layers = []
for i in range (0, 32):
layers.append(f(i))
return tuple(layers)
但这通常最适合于生成器表达式
def build_layers():
return tuple(f(i) for i in range(0,32))
顺便说一下,范围的起始值默认为0
所以这同样有效
def build_layers():
return tuple(f(i) for i in range(32))
您可能应该在这里使用一个列表,因为
layers+=(True),
每次都会创建一个新的元组:layers=[];layers.append(True)
实际上,元组本质上是不可变的。您在这里所做的是每次都创建一个新的tuple对象。您是否尝试过至少不能选择列表?它应该是tuple(x代表x,范围为(0,32))(True,)*32
?谢谢,当然我需要一些逻辑来决定要附加哪个布尔值,因此*32不起作用。@stacker您的代码不显示类似的内容。