2016-05-04 5 views
1

Вот заданные значения:Python объединения для и если условия

v = 1, w = 1, x = 1, y = 0, z = 1 
j = 0, k = 1, l = 0, m = 0, n = 0, o = 0, p = 0 

chked = [v, w, x, y, z] 
unchked = [j, k, l, m, n, o, p] 

То, что я хочу сделать что-то вроде этого:

for a in chked: 
    if a != 1 
    or 
for b in unchked: 
    if b != 0: 
Then only Do something. (change those element's value etc.) 
+0

Что такое (a) и (b)? – corinna

+0

Не могли бы вы прояснить свой вопрос, представив пример того, как вы это сделаете, используя циклы 'for' и' if'? – jotik

+0

@corinna только что отредактировал это. – jotik

ответ

1

Вы должны использовать comprehension list нравится следующим образом:

if not [elt for elt in chked if elt == 0] 
or not [elt for elt in unchked if elt == 1]): 
    #do stuff 
0

Как я понял ваш вопрос, вы можете найти, где нарушено правило каждой проверенной/непроверенной пары. , то вы можете использовать следующий код:

# Example 
chked = [1, 1, 1, 1] 
unchked = [0, 0, 0, 1] 
for a in range(len(chked)): 
if chked[a] != 1 or unchked[a] != 0: 
    print "At index {0}: chked[{0}] = {1} \ 
      and unchcked[{0}] = {2}".format(a, chked[a], unchked[a]) 
+0

@JohnTitusJungao, прочитав его ответ, я отредактировал свой вопрос, чтобы быть более конкретным. – Kamal

2

Так что вы хотите сделать, это расплывчатое, я должен буду сделать некоторые предположения. Если вы имеете дело с массивами со значениями ограничивается 1 и 0, и вы хотите, чтобы «сделать что-то», когда есть 1s или 0s, когда они не должны быть там, вы можете сделать это:

v, w, x, y, z = 1, 1, 1, 0, 1 
j, k, l, m, n, o, p = 0, 1, 0, 0, 0, 0, 0 

# I assume you have reasons for storing each value separately from the list 
chked = [v, w, x, y, z] 
unchked = [j, k, l, m, n, o, p] 

if not all(chked) or any(unchked): 
    DoSomething() 

not all(chked) будет проверьте, не все ли элементы 1s. То есть, некоторые 0s существуют в chked. Пока any(unchcked) проверяет наличие 1 среди 0s.

Однако, если вы хотите сделать что-то на элементах, которые отличаются, вы можете сделать это:

new_chcked = [DoSomethingOnA(a) if a == 0 else a for a in chcked] 
new_unchcked = [DoSomethingOnB(b) if b == 1 else b for b in unchcked] 
+0

"* Поскольку вы хотите сделать это нечетко *" ->, вы не должны отвечать, но попробуйте сделать OP, чтобы дать правильное описание проблемы. В противном случае вы рискуете в будущем изменить вопрос, недействительный ваш ответ (и вы увековечиваете дрянные спрашивающие поведения, давая ленивым искателям, что им нужно). –

1

Вы хотите, чтобы найти все элементы, которые удовлетворяют условию?

not_one = filter(lambda x: x!=1, chked) 

# or in python3 
not_one = list(filter(lambda x: x!=1, chked)) 

или у вас есть два списка одинаковой длины и хотите искать пары (это то, что вы написали в комментарии с a in range(len(chked)), но она не подходит к примеру вопрос)

Смежные вопросы