Найдите (и сохраните), дубликаты подсписка в Python

Две главных причины. Короче говоря, рассмотрите тщательно; могло быть серьезное основание для него, но если существует быть ОЧЕНЬ явным в Ваших комментариях, потому что это может быть хрупким и, поскольку Вы говорите, что себя, люди обычно не привыкли к наблюдению кода как это.

Поразрядный xor! = Логический xor (за исключением 0 и 1)

Во-первых, если Вы воздействуете на значения кроме false и true (или 0 и 1, как целые числа), ^ оператор, может представить поведение, не эквивалентное логическому xor. Например:

int one = 1;
int two = 2;

// bitwise xor
if (one ^ two)
{
  // executes because expression = 3 and any non-zero integer evaluates to true
}

// logical xor; more correctly would be coded as
//   if (bool(one) != bool(two))
// but spelled out to be explicit in the context of the problem
if ((one && !two) || (!one && two))
{
  // does not execute b/c expression = ((true && false) || (false && true))
  // which evaluates to false
}

Кредит пользователю @Patrick для выражения этого сначала.

Порядок операций

1118-секундный, |, &, и ^, как побитовые операторы, не закорачивают. Кроме того, несколько побитовых операторов, объединенных в цепочку вместе в отдельном операторе - даже с явными круглыми скобками - могут быть переупорядочены оптимизирующими компиляторами, потому что все 3 операции являются обычно коммутативными. Это важно, если порядок операций имеет значение.

, Другими словами

bool result = true;
result = result && a() && b();
// will not call a() if result false, will not call b() if result or a() false

будет не всегда давать тот же результат (или конечное состояние) как [1 120]

bool result = true;
result &= (a() & b());
// a() and b() both will be called, but not necessarily in that order in an
// optimizing compiler

, Это особенно важно, потому что Вы не можете методы управления a() и b(), или кто-то еще может приехать и изменить их позже не понимание зависимости и вызвать противное (и только часто сборка конечных версий) ошибка.

5
задан Mike 12 November 2009 в 15:32
поделиться

2 ответа

common = set(x[0])
for l in x[1:]:
    common &= set(l)
print list(common)

or:

import operator
print reduce(operator.iand, map(set, x))
9
ответ дан 18 December 2019 в 08:29
поделиться

In one liner:

>>> reduce(set.intersection, x[1:], set(x[0]))
set([3, 4])
7
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: