我想知道是否可以在列表项中包含逻辑运算符OR。例如:
CHARS = ['X','Y','Z']
将这行代码更改为:(我知道这不是正确的方法)
任何人都可以帮助我吗?
CHARS = ['X','Y','Z','X OR Y','Y OR Z','X OR Z']
示例代码:
import numpy as np
seqs = ["XYZXYZ","YZYZYZ"]
CHARS = ['X','Y','Z']
CHARS_COUNT = len(CHARS)
maxlen = max(map(len, seqs))
res = np.zeros((len(seqs), CHARS_COUNT * maxlen), dtype=np.uint8)
for si, seq in enumerate(seqs):
seqlen = len(seq)
arr = np.chararray((seqlen,), buffer=seq)
for ii, char in enumerate(CHARS):
res[si][ii*seqlen:(ii+1)*seqlen][arr == char] = 1
print res
如果发生X则先扫描以检测X然后将被判1然后检测Y并持续Z.
输出:
[[1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1]
[0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 1]]
包含逻辑OR后的预期输出:
[[1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 0 1]
[0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 0 1 0 1 0 1]]
答案 0 :(得分:0)
以下示例有点人为,但使用itertools.combinations将是一种为给定列表生成大小为n的组合的方法。将其与str.join()
结合使用,您就可以生成字符串,如问题的第一部分所示:
import itertools
CHARS = ['X','Y','Z']
allCombinations = [" OR ".join(x) for i in range(1,len(CHARS)) for x in itertools.combinations(CHARS, i)]
print repr(allCombinations)
输出:
['X', 'Y', 'Z', 'X OR Y', 'X OR Z', 'Y OR Z']