Вопрос:

Булево-логическое сравнение списков с использованием понимания списка

python if-statement list-comprehension boolean-logic

766 просмотра

3 ответа

33 Репутация автора

Вот что я пытаюсь сделать (в понимании единого списка):

1. Сравните отношение 2 списков целых чисел с помощью логических операторов.
2. Верните список значений bool-int, где:
- 1 возвращается, когда оба значения a, b равны 1 (1,1)
- 0 возвращается, когда a == 1 и b == 0 (1,0)
- другие случаи пропускаются, как в (0,0 и 0,1)

Пример логики:

A = [1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0]
B = [1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]
L = []

for i in range(len(B)):
    if A[i] + B[i] == 2:
        L.append(1)
    elif A[i]==1 and B[i]==0:
        L.append(0)

Ожидаемый вывод для печати (L):

[1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1]

Моя попытка: (syntaxError указывает на 'for') (и это немного долго)

L = [1 if x+y == 2 else 0 if x-y == 1 for x,y in zip(A, B)]  

Лучший ответ от Wander Nauta (Pythonic and fast)

L = [y for x, y in zip(A, B) if x]  

,
Пара моих Ориентиры:
- добавление сумм из-значений-оф-двух списков , записанными в новый список,
- если- то еще-в-списка-понимания
- Элиф-в-списке постижение-условные выражения

Варианты использования:
- Сравнение списков, представляющих набор функций (не), требуемых пользователем / клиентом, и (не) доступных для данного продукта / услуги
- Возвращенные 1 будут представлять desires_met, а 0 будут представлять desires_unmet
- Дальнейшие производные / анализ могут легко сделать в булевом списке.

Автор: Jonathan Rolfsen Источник Размещён: 08.11.2017 11:05

Ответы (3)


0 плюса

11661 Репутация автора

Решение

Как это?

L = [int(y) for x, y in zip(A, B) if int(x)]

Если х равен 0, элемент пропускается. В противном случае, если y равно 1, добавьте 1; если y равно 0, добавьте 0.

Автор: Wander Nauta Размещён: 08.11.2017 11:13

0 плюса

0 Репутация автора

Я думаю, что-то вроде этого было бы намного легче читать и расширять:

A = '11111111111000000010'
B = '11101010101010101010'

result_map = {
    ('1', '1'): 1,
    ('1', '0'): 0,
}

result = [result_map[pair] for pair in zip(A, B) if pair in result_map]
Автор: user8651755 Размещён: 08.11.2017 11:28

0 плюса

11 Репутация автора

Вопрос довольно запутанный, но я думаю, что вы хотите, чтобы это:

a = [int(x) for x in A] 
b = [int(x) for x in B]
c = [x for x in zip(a, b)]
I = [idx for (idx, x) in enumerate(a) if x == 0]
L = [x for (idx, x) in enumerate(b) if idx not in I]
Автор: nesaboz Размещён: 08.11.2017 11:36
Вопросы из категории :
32x32