真相table列表
Truth table list
我的目标是在 python 中实现 table,这是我的代码:
from re import findall
string = "xyz"
def getChars(str):
listChars = findall(r"\w", str)
return listChars
def createCharsTruthTable(lst):
n = 2 ** len(lst)
boolList = [[True for x in range(n)] for j in range(len(lst))]
num_of_T = n / 2
for i in range(len(boolList)):
for j in range(len(boolList[i])):
if j >= num_of_T:
boolList[i][j] = False
num_of_T /= 2
return boolList
createCharsTruthTable(getChars(string))
问题是输出是...
[[True, True, True, True, False, False, False, False], [True, True, False, False, False, False, False, False], [True, False, False, False, False, False, False, False]]
第一个列表是正确的。我唯一的问题是后续列表,其中第二个列表是...
[True, True, False, False, False, False, False, False]
我的问题是如何将它变成...
[True, True, False, False, True, True, False, False]
假设您只想创建一个 "truth table",第一行有 1/2 True
个值,第二行有 2x 1/4 True
个值,依此类推,这样 table 中的列将成为具有该参数数量的真值函数的输入。
您不能只使用任何 j
作为何时将 False
放入 table 的截止点,因为该模式是周期性的。相反,您可以尝试将当前 j
除以 2 的幂并测试它是偶数还是奇数:
cols = 3
rows = 2**cols
boolList = [[True for x in range(rows)] for j in range(cols)]
for i in range(cols):
for j in range(rows):
if (j // (2**(cols-1-i))) % 2 == 1:
boolList[i][j] = False
boolList
的结果:
[[True, True, True, True, False, False, False, False],
[True, True, False, False, True, True, False, False],
[True, False, True, False, True, False, True, False]]
更好的方法可能是使用 itertools.product
代替:
>>> import itertools
>>> list(itertools.product([True, False], repeat=3))
[(True, True, True),
(True, True, False),
(True, False, True),
(True, False, False),
(False, True, True),
(False, True, False),
(False, False, True),
(False, False, False)]
(请注意,行和列在这里颠倒了,但这样可能更有意义。)
我的目标是在 python 中实现 table,这是我的代码:
from re import findall
string = "xyz"
def getChars(str):
listChars = findall(r"\w", str)
return listChars
def createCharsTruthTable(lst):
n = 2 ** len(lst)
boolList = [[True for x in range(n)] for j in range(len(lst))]
num_of_T = n / 2
for i in range(len(boolList)):
for j in range(len(boolList[i])):
if j >= num_of_T:
boolList[i][j] = False
num_of_T /= 2
return boolList
createCharsTruthTable(getChars(string))
问题是输出是...
[[True, True, True, True, False, False, False, False], [True, True, False, False, False, False, False, False], [True, False, False, False, False, False, False, False]]
第一个列表是正确的。我唯一的问题是后续列表,其中第二个列表是...
[True, True, False, False, False, False, False, False]
我的问题是如何将它变成...
[True, True, False, False, True, True, False, False]
假设您只想创建一个 "truth table",第一行有 1/2 True
个值,第二行有 2x 1/4 True
个值,依此类推,这样 table 中的列将成为具有该参数数量的真值函数的输入。
您不能只使用任何 j
作为何时将 False
放入 table 的截止点,因为该模式是周期性的。相反,您可以尝试将当前 j
除以 2 的幂并测试它是偶数还是奇数:
cols = 3
rows = 2**cols
boolList = [[True for x in range(rows)] for j in range(cols)]
for i in range(cols):
for j in range(rows):
if (j // (2**(cols-1-i))) % 2 == 1:
boolList[i][j] = False
boolList
的结果:
[[True, True, True, True, False, False, False, False],
[True, True, False, False, True, True, False, False],
[True, False, True, False, True, False, True, False]]
更好的方法可能是使用 itertools.product
代替:
>>> import itertools
>>> list(itertools.product([True, False], repeat=3))
[(True, True, True),
(True, True, False),
(True, False, True),
(True, False, False),
(False, True, True),
(False, True, False),
(False, False, True),
(False, False, False)]
(请注意,行和列在这里颠倒了,但这样可能更有意义。)