Форум сайта python.su
0
.
Отредактировано Ilya (Май 30, 2014 20:06:04)
Офлайн
0
Будьте добры, помогите.
У меня два списка a и b. После каждого хода они меняются и производится функция logic, которая должна проверять наличие какой-либо тройки элементов. Элементы в моем случае это цифры от 0 до 9.
Тройки элементов могут быть предварительно заданы(правда я не уверен, как правильно их задавать). В список a и b элементы забиваются в произвольном порядке.
Теми тремя способами решить данную проблемку не выходит.
Офлайн
857
>>> def f(lst, sub): ... return len(set(lst) & set(sub)) == len(sub) ... >>> f([1, 2, 3, 4, 5, 6, 7], [2, 5, 7]) True >>> f([1, 2, 3, 4, 5, 6, 7], [0, 8, 9]) False >>> f([1, 2, 3, 4, 5, 6, 7], [2, 5, 8]) False >>> f([1], [1, 1]) False >>>
Отредактировано py.user.next (Май 31, 2014 11:05:19)
Офлайн
47
>>> lst = [1,2,3,4,5,6,8,9,0] >>> {0,1,2}.issubset(lst) True >>> set([6,7,8]).issubset(lst) False >>> set([0,1,2]) < set(lst) True >>> {6,7,8} < set(lst) False
Отредактировано bismigalis (Май 31, 2014 17:40:27)
Офлайн
9
2Ilya
логический оператор and выдает левый операнд если он ложный, иначе вернет правый операнд.
То есть выражение:
0 and 1
b=[(0 and 1 and 2),(6 and 7 and 8),(2 and 4 and 6)]
[0, 8, 6]
b=[(0, 1, 2),(6, 7, 8),(2, 4, 6)] a=[1,2,3,4,5,6,8,9,0] def logic(a, b): for x in a: M = set(x) & set(b) if M == set(x): print(x, 'in', b) else: print(x, "isn't in", b) if __name__ == '__main__': logic(b, a)
(0, 1, 2) in [1, 2, 3, 4, 5, 6, 8, 9, 0] (6, 7, 8) isn't in [1, 2, 3, 4, 5, 6, 8, 9, 0] (2, 4, 6) in [1, 2, 3, 4, 5, 6, 8, 9, 0]
Отредактировано WoMax (Июнь 1, 2014 17:24:02)
Офлайн
9
Или решение с употребление оператора and, если он тебе уж так понравился
b=[(0, 1, 2),(6, 7, 8),(2, 4, 6)] a=[1,2,3,4,5,6,8,9,0] def logic(a, b): for x in a: if x[0] in b and x[1] in b and x[2] in b: print(x, 'in', b) else: print(x, "isn't in", b) if __name__ == '__main__': logic(b, a)
(0, 1, 2) in [1, 2, 3, 4, 5, 6, 8, 9, 0] (6, 7, 8) isn't in [1, 2, 3, 4, 5, 6, 8, 9, 0] (2, 4, 6) in [1, 2, 3, 4, 5, 6, 8, 9, 0]
Офлайн