В этом вопросе, когда я что-то искал сам!
Вот что я сделал:
def dont_repeat(x=[0,1,1,2]): # Pass a list
from itertools import permutations as per
uniq_set = set()
for byt_grp in per(x, 4):
if byt_grp not in uniq_set:
yield byt_grp
uniq_set.update([byt_grp])
print uniq_set
for i in dont_repeat(): print i
(0, 1, 1, 2)
(0, 1, 2, 1)
(0, 2, 1, 1)
(1, 0, 1, 2)
(1, 0, 2, 1)
(1, 1, 0, 2)
(1, 1, 2, 0)
(1, 2, 0, 1)
(1, 2, 1, 0)
(2, 0, 1, 1)
(2, 1, 0, 1)
(2, 1, 1, 0)
set([(0, 1, 1, 2), (1, 0, 1, 2), (2, 1, 0, 1), (1, 2, 0, 1), (0, 1, 2, 1), (0, 2, 1, 1), (1, 1, 2, 0), (1, 2, 1, 0), (2, 1, 1, 0), (1, 0, 2, 1), (2, 0, 1, 1), (1, 1, 0, 2)])
В принципе, создайте набор и продолжайте добавлять к нему. Лучше, чем создавать списки и т. Д., Которые занимают слишком много памяти. Надеюсь, это поможет следующему человеку, смотрящему :-) Комментируйте набор «обновление» в функции, чтобы увидеть разницу.
Итак, как я могу опросить переменную, которая является NoneType?
Использовать оператор
is
, напримерif variable is None:
Почему это работает ?
Поскольку
None
является единственным одноэлементным объектомNoneType
в Python, мы можем использовать операторis
для проверки того, является ли переменная имеетNone
в нем или нет.Цитирование из
is
docs ,Тесты
is
иis not
для идентификации объекта:x is y
является истинным тогда и только тогда, когдаx
иy
являются одним и тем же объектом.x is not y
дает обратное значение истинности.Поскольку может быть только один экземпляр
None
,is
будет предпочтительным способом проверкиNone
.
Услышьте его из уст лошади
Цитата Руководство по стилю кодирования Python - PEP-008 (совместно определяемый самим Гвидо),
Сравнение с синглтонами типа
None
всегда должно выполняться с помощьюis
илиis not
, никогда не выполняемых операторов равенства.
Это также можно сделать с помощью isinstance
согласно ответ Алекса Холла :
>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True
isinstance
также интуитивно, но есть усложнение, которое требует line
NoneType = type(None)
, который не нужен для таких типов, как int
и float
.
if variable is None:
print 'Is None'
-
if variable is not None:
print 'Isn\'t None'
z = variable is None
работает, если вам не нужен условный оператор if. – Devin Carpenter 11 January 2018 в 13:47