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您的代码不显示类似的内容。