Я ищу более чистый способ сделать следующий тип сравнения:
if x == y or y == z or x == z:
do something
Хотя в этом маленьком примере это было бы нормально, я хочу сравнить 24 переменные частями по 3 (как указано выше) за раз. Мне трудно найти более чистый способ сделать эти заявления. Есть идеи?
редактировать: чтобы это выглядело немного больше, чем то, что я пытаюсь очистить:
if(
#corner 1
cube[0] == cube[29] or
cube[0] == cube[42] or
cube[29] == cube[42] or
#corner 2
cube[2] == cube[9] or
cube[2] == cube[44] or
cube[9] == cube[44] or
#corner 3
...
#corner 8
...
):
doSomething
Решение благодаря Primusa:
corner1 = [cube[0], cube[29], cube[42]]
corner2 = [cube[2], cube[9], cube[44]]
...
if(len(corner1) != len(set(corner1)) or
len(corner2) != len(set(corner2)) or
...)
dostuff
Поместить это в функцию? Хотя, во-первых, странно иметь 24 переменные. Не могли бы вы вместо этого использовать список?
Вам действительно нужны 24 переменные для начала?
@Ry Все значения находятся в большем списке. Например, я пытаюсь сравнить myArray[0], myArray[3] и myArray[9], чтобы увидеть, равны ли любые 2 из этих 3 значений друг другу.
Какая-то логика, с которой сравниваются триплеты?
@zwer Они действительно находятся в списке, а не во всех отдельных переменных. Это должно было просто упростить вопрос (по крайней мере, на мой взгляд).
@Ry Да. Я сравниваю 3 цвета на углу кубика Рубика, чтобы убедиться, что нет двух одинаковых цветов. Часть моих ограничений заключается в том, что куб представлен в виде длинного списка из 54 элементов.
@PrashinJeevaganth Это выглядит немного чище (хотя я надеюсь на что-то еще чище, если это возможно). Вопрос обновлен, чтобы более точно показать, что я просто пытаюсь сделать.
@AllenUnderwood [ссылка] (coderhelper.com/questions/13792604/…), это может вам помочь
Каково ваше определение «чистого»? Вы можете использовать
any()
иitertools.combinations()
, чтобы избежать "ручного" сравнения, но я бы не назвал это чистым...