具有固定顺序元素的Python布尔列表

2024-09-29 23:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用我用LIGHTx命名的布尔变量来构造一些二进制信号系统。你知道吗

LIGHT1 = True
LIGHT2 = True
LIGHT3 = False
LIGHT4 = False

接下来,我将这些变量嵌套到一个列表中,以供将来计算

signal = [LIGHT1, LIGHT2, LIGHT3, LIGHT4]

目前,我正在使用来自Python: Boolean List to Binary StringConvert base-2 binary number string to int的思想将列表转换为int number,这是我的信号。这里,[1,1,0,0]表示12。你知道吗

In [97]: boolList2BinString(signal)
Out[97]: 12

我的问题是:

  1. 如何通过更新灯光的值来自动更新“signal”的元素,而不是一次又一次地运行signal = [LIGHT1, LIGHT2, LIGHT3, LIGHT4]?Whitch的意思是,在我剩下的代码中,我只需要运行LIGHTx = xxxxboolList2BinString(signal)。(也许像C++的指针一样?)你知道吗
  2. 如果问题1是不可能的,我有没有办法确定列表中灯光的顺序?你知道吗

[更新]

请排除在“boolList2BinString”函数中构建“signal”列表的方式。你知道吗

原件:

def boolList2BinString(lst):
    return int('0b' + ''.join(['1' if x else '0' for x in lst]), 2)

建筑内部:

def boolList2BinString():
    osignal = [LIGHT1 , LIGHT2 , LIGHT3 , LIGHT4 ]
    return int('0b' + ''.join(['1' if x else '0' for x in signal ]), 2)

提前谢谢!你知道吗


Tags: tofalsetruenumber列表signaldefint
3条回答

也许你只需要一些包装纸。你知道吗

class Light(object):
    def __init__(self, state):
        self.state = state
    def false(self):
        self.state = False
    def true(self):
        self.state = True

LIGHT1 = Light(True)
LIGHT2 = Light(True)
LIGHT3 = Light(False)
LIGHT4 = Light(False)

signal = [LIGHT1, LIGHT2, LIGHT3, LIGHT4]

然后您只需将每个灯光的状态更改为LIGHT1.true()或LIGHT1.false(),signal列表中的值将自动更改。你知道吗

LIGHT1.false()
LIGHT1.state  # False
LIGHT1.true()
LIGHT1.state  # True

当然,命名方法可以改变。你知道吗

您可以使用一个特殊的属性类来设置整数中的位。你知道吗

举个例子:

class Light(property):
    def __init__(self, rank):
        self.rank= rank
        super(Light, self).__init__(self._get, self._set)
    def _get(self, signal):
        return (signal.value & (1 << self.rank)) != 0
    def _set(self, signal, value):
        if value:
            signal.value |= 1 << self.rank
        else:
            signal.value &= ~(1 << self.rank)

class Signal(object):
    def __init__(self, value=0):
        self.value = value
    l1 = Light(3)
    l2 = Light(2)

您可以简单地使用:

>>> s = Signal()
>>> s.value
0
>>> s.l1
False
>>> s.l1 = True
>>> s.l1
True
>>> s.value
8

(在Python2.7和Python3.5上测试)

您可以创建一个类来保存布尔值,然后它就像指针一样

>>> class Light:
...     def __init__(self, value):
...             self.value = value
...     def get(self):
...             return(self.value)
...     def set(self, value):
...             self.value = value

然后使用轻。快()获取值,或灯光.set()设置值

>>> Light1 = light(True)
>>> Light2 = light(False)
>>> lights = [light1, light2]
>>> for l in lights:
...     print(l.get())
... 
True
False

显示集合的示例:

>>> for l in lights:
...     print(l.get())
... 
True
False

>>> light2.set(True)
>>> for l in lights:
...     print(l.get())
... 
True
True
>>> 

相关问题 更多 >

    热门问题