как сравнить значение 3 списка с условием If - PullRequest
0 голосов
/ 05 февраля 2020

Вот мои списки

A = [32,33,34,35,36,37,38,39,40,41,42]
B = [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0]
C = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
D = [1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1]

Здесь в списке B значение должно быть 0, в списке C значение должно быть 0, а в списке D значение должно быть 1, если это так, то оно передается еще не удалось. Как вы можете видеть в списке B, значение индекса 2 равно 1, поэтому в списке C значение индекса 1 равно 1 вместо 0, а в списке D значение индекса 3,4 равно 2 вместо 1. Я написал код для этого, но он печатает несколько раз

Я хочу проверить одно и то же значение индекса для 3 списка

как

B[0] = 0,B[1]=0
C[0] = 0,C[1]=1
D[0] = 1,D[1]=1

, как вы можете видеть в первой итерации значения верны, но во 2-й раз он потерпел неудачу в C, потому что 2-е значение индекса 1, а не 0. Таким образом, я хочу проверить все 3 списка.

, по этой причине я взял индекс из Список А. вы можете увидеть в моем коде.

мой код -:

comment = "Wrong Signal in "
for first1 in A:
    idx_val = A.index(first1)

    if (B[idx_val] != 0):
        comment = comment + 'B' 

    if C[idx_val] != 0:
        comment = comment + 'C' 

    if D[idx_val] != 1:
        comment = comment + 'D' 
print comment

Output-'Wrong Signal in B,C,D,D,B

Но я ожидаю вывод, подобный этому

Output- 'Wrong Signal in B,C,D

и другой пример, если все значения в списке B равны нулям и C, D имеет неправильное значение в любом индексе, тогда он должен вывести

output -'Wrong Signal in C,D

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 05 февраля 2020
for a, b, c, d in zip(A, B, C, D):
    r = [
        key for key, value, check in zip('bcd', (b, c, d), (0, 0, 1))
        if value != check
    ]
    if r:
        print(f"{a}: wrong signal for {', '.join(r)}")
0 голосов
/ 05 февраля 2020

вы можете создавать свои списки для установки и сравнения с одним значением:

def get_bad_list(lists, expected_values):
    bad_lists = ''
    for l, (s, v) in zip(lists, expected_values):
        if set(l) != v:
            bad_lists += s

    return bad_lists

bad_lists = get_bad_list([B, C, D], [('B', {0}), ('C', {0}), ('D', {1})])

if bad_lists:
    print 'Wrong Signal in ' + ', '.join(bad_lists) + '!'
else:
    print 'All good!'

вывод:

Wrong Signal in B, C, D!

, если вы хотите перебирать списки и «для проверки того же значения индекса» вы можете использовать:

comment = "Wrong Signal in "

is_B_good = True
is_C_good = True
is_D_good = True

for index in range(len(A)):
    if is_B_good and B[index] != 0:
        is_B_good = False
        comment = comment + 'B '

    if is_C_good and C[index] != 0:
        is_C_good = False
        comment = comment + 'C '

    if is_D_good and D[index] != 1:
        is_D_good = False
        comment = comment + 'D '

print comment   

вывод:

Wrong Signal in D C B 
0 голосов
/ 05 февраля 2020

Вам нужно выйти из вашего l oop после того, как вы нашли первый экземпляр. Поэтому вы должны проверить, находится ли 0 в B ДАЖЕ ТОЛЬКО ОДИН РАЗ. Вы можете просто спросить «если 0 в B». Тогда вы уже можете выйти, потому что вы не хотите знать, сколько раз 0 в B.

A = [32,33,34,35,36,37,38,39,40,41,42]
B = [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0]
C = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
D = [1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1]


comment = "Wrong Signal in "

def check_if_fine(List,wrong_numbers,List_name):
    No_repetitions = set(List)

    for number in wrong_numbers:
        if number not in No_repetitions:
            return ''
        else:
            return List_name

comment += check_if_fine(B,[1],'B')
comment += check_if_fine(C,[1],'C')
comment += check_if_fine(D,[2],'D')       

print(comment)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...