weixin_39017744
2019-10-13 19:34
采纳率: 71.1%
浏览 758

请问如何用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....
直到判断完所有位数为止,所有位都有了1的话就输出当前这三个数组,已输出的数组不参与之后的判断。

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

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开始依次往后。

    点赞 评论

相关推荐 更多相似问题