2019-10-13 19:34

# 请问如何用python做两个数组逐位判断？

a1: 1,0,0,1,0,0,0,1
a2: 0,0,0,0,1,1,1,1
a3: 0,1,0,1,0,1,0,0
a4: 1,0,1,1,1,1,0,0
a5: .......

if ((a1第一位or a2第一位 or a3第一位=1 )and (a1第二位 or a2 第二位 or a3第二位=1）and....

• 点赞
• 写回答
• 关注问题
• 收藏
• 邀请回答

#### 3条回答默认 最新

• blownewbee 2019-10-13 21:10
已采纳

不知道抓取3个数组是任意3个，比如123 124 125 134 135 235...，还是顺序联系的3个，123 456 789这样抓。
我是按照前者写的，如果不是，请说明

``````# -*- coding: UTF-8 -*-
from itertools import combinations

a1=[ 1,0,0,1,0,0,0,1]
a2=[ 0,0,0,0,1,1,1,1]
a3=[ 0,1,0,1,0,1,0,0]
a4=[ 1,0,1,1,1,1,0,0]
a5=[ 1,1,1,1,1,1,1,0]
a6=[ 0,0,0,0,0,0,0,1]
a=[a1,a2,a3,a4,a5,a6]

al = list(combinations(a,3))
for i in al:
flag = True
for j in range(len(i[0])):
if (i[0][j] + i[1][j] + i[2][j] == 0):
flag = False
break
if flag:
print(i)

``````

([1, 0, 0, 1, 0, 0, 0, 1], [0, 0, 0, 0, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 0])
([1, 0, 0, 1, 0, 0, 0, 1], [0, 1, 0, 1, 0, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0])
([1, 0, 0, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0])
([1, 0, 0, 1, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1])
([0, 0, 0, 0, 1, 1, 1, 1], [0, 1, 0, 1, 0, 1, 0, 0], [1, 0, 1, 1, 1, 1, 0, 0])
([0, 0, 0, 0, 1, 1, 1, 1], [0, 1, 0, 1, 0, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0])
([0, 0, 0, 0, 1, 1, 1, 1], [1, 0, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0])
([0, 0, 0, 0, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1])
([0, 1, 0, 1, 0, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1])
([1, 0, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1])

只使用1次

``````# -*- coding: UTF-8 -*-
from itertools import combinations

a1=[ 1,0,0,1,0,0,0,1]
a2=[ 0,0,0,0,1,1,1,1]
a3=[ 0,1,0,1,0,1,0,0]
a4=[ 1,0,1,1,1,1,0,0]
a5=[ 1,1,1,1,1,1,1,0]
a6=[ 0,0,0,0,0,0,0,1]
a=[a1,a2,a3,a4,a5,a6]
al = list(combinations(list(i for i in range(0, 6)),3))
used = []
for i in al:
flag = False
if not(i[0] in used or i[1] in used or i[2] in used):
flag = True
for j in range(7):
if (a[i[0]][j] + a[i[1]][j] + a[i[2]][j] == 0):
flag = False
break
if flag:
used.append(i[0])
used.append(i[1])
used.append(i[2])
print(' '.join(map(str, a[i[0]])) + "; " + ' '.join(map(str, a[i[1]])) + "; " + ' '.join(map(str, a[i[2]])))

``````

1 0 0 1 0 0 0 1; 0 0 0 0 1 1 1 1; 1 1 1 1 1 1 1 0

点赞 评论
• JonathanYan 2019-10-13 23:45

chkList函数负责判断所需逻辑关系，其他代码只负责展示输出。

``````def chkList(a, b, c, n):
for i in range(n):
if not (a[i] or b[i] or c[i]):
return False
return True

if __name__ == "__main__":
a = [
[1, 0, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 1, 1, 1],
[0, 1, 0, 1, 0, 1, 0, 0],
[1, 0, 1, 1, 1, 1, 0, 0]
]
lists = len(a)
print("len(a)=%d" % lists)

for i in range(pow(lists, 3)):
da, db, dc = i//lists//lists, i // lists % lists, i % lists
if da < db < dc and chkList(a[da], a[db], a[dc], 8):
print("[a[%d], a[%d], a[%d]] : [\n\t%s,\n\t%s,\n\t%s\n]" % (da, db, dc, a[da], a[db], a[dc]))

``````
点赞 评论
• bluewind999 2019-10-14 10:50

楼主的意思应该是这样，把已有的数组进行遍历，一旦有满足条件的连续三个数组就输出，然后重新从三个数组之后的数组继续判断吧
我大概写了个代码，很容易解读，可以直接拿来用：

def main():

``````a1=[ 1,0,0,1,0,0,0,1]
a2=[ 0,0,0,0,1,1,1,1]
a3=[ 0,1,0,1,0,1,0,0]
a4=[ 1,0,1,1,1,1,0,0]
a5=[ 1,1,1,1,1,1,1,0]
a6=[ 0,0,0,0,0,0,0,1]
a7=[ 0,0,0,0,1,0,0,0]
all_a = []
all_a.append(a1)
all_a.append(a2)
all_a.append(a3)
all_a.append(a4)
all_a.append(a5)
all_a.append(a6)
all_a.append(a7)
count = len(all_a)
lenght_a = len((all_a[0]))
print("数组个数",count)    # 所有数组个数
print("单个数组长度",lenght_a) # 所有数组长度

print_a = 0  #记录数组是否已经输出

for i in range(count-2):

if(i < print_a):
continue
flag = 1
for j in range(lenght_a):
result = all_a[i][j] or  all_a[i+1][j] or all_a[i+2][j]
flag = flag and result
if(flag ==1):
print("符合条件的起始数组",i)
print(all_a[i],all_a[i+1],all_a[i+2])
print_a = 3+i
``````

if name == '__main__':
main()

``````    输出结果：
*** 远程解释器再初始化了  ***
``````

数组个数 7
单个数组长度 8
符合条件的起始数组 1
[0, 0, 0, 0, 1, 1, 1, 1] [0, 1, 0, 1, 0, 1, 0, 0] [1, 0, 1, 1, 1, 1, 0, 0]
符合条件的起始数组 4
[1, 1, 1, 1, 1, 1, 1, 0] [0, 0, 0, 0, 0, 0, 0, 1] [0, 0, 0, 0, 1, 0, 0, 0]

数组1，2，3满足条件，程序直接跳转到数组4判断，4，5，6符合条件，继续从7开始依次往后。

点赞 评论