Как найти большинство голосов для списка, который может содержать -1, 1 и 0?
Например, при наличии списка:
x = [-1, -1, -1, -1, 0]
Большинство равно -1 , поэтому вывод должен возвращать -1
Другой пример, учитывая список:
x = [1, 1, 1, 0, 0, -1]
Большинство голосов будет 1
И когда у нас ничья, большинство голосов должно вернуть 0, например:
x = [1, 1, 1, -1, -1, -1]
Это также должно возвращать ноль:
x = [1, 1, 0, 0, -1, -1]
Самый простой случай получить большинство голосов, кажется, суммировать список и проверить, является ли он отрицательным, положительным или 0.
>>> x = [-1, -1, -1, -1, 0]
>>> sum(x) # So majority -> 0
-4
>>> x = [-1, 1, 1, 1, 0]
>>> sum(x) # So majority -> 1
2
>>> x = [-1, -1, 1, 1, 0]
>>> sum(x) # So majority is tied, i.e. -> 0
0
После суммы я мог бы сделать эту проверку, чтобы получить большинство голосов, то есть:
>>> x = [-1, 1, 1, 1, 0]
>>> majority = -1 if sum(x) < 0 else 1 if sum(x)!=0 else 0
>>> majority
1
>>> x = [-1, -1, 1, 1, 0]
>>> majority = -1 if sum(x) < 0 else 1 if sum(x)!=0 else 0
>>> majority
0
Но, как отмечалось ранее, это уродливо: Python, помещающий -elif-else в одну строку, а не pythonic.
Так что решение похоже
>>> x = [-1, -1, 1, 1, 0]
>>> if sum(x) == 0:
... majority = 0
... else:
... majority = -1 if sum(x) < 0 else 1
...
>>> majority
0
ОТРЕДАКТИРОВАНО
Но есть случаи, когда sum()
не работает, например, @RobertB.
>>> x = [-1, -1, 0, 0, 0, 0]
>>> sum(x)
-2
Но в этом случае большинство голосов должно быть 0!!
[-1, -1, 0, 0, 0, 0]
ответ равен нулю? В этом случаеsum
вам не подойдет. - person RobertB   schedule 04.11.2015[1, 1, 0, 0]
? - person Alex Hall   schedule 10.11.2015return 0
в OP. - person alvas   schedule 10.11.2015