回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><strong>如何找到可以包含-1、1和0的列表的多数票?</strong></p>
<p>例如,给定一个列表:</p>
<pre><code>x = [-1, -1, -1, -1, 0]
</code></pre>
<p>大多数是-1,因此输出应该返回<code>-1</code></p>
<p>另一个例子,给出一个列表:</p>
^{pr2}$
<p>多数票将是<code>1</code></p>
<p>当我们平局时,多数票应返回0,例如:</p>
<pre><code>x = [1, 1, 1, -1, -1, -1]
</code></pre>
<p>这也应该返回零:</p>
<pre><code>x = [1, 1, 0, 0, -1, -1]
</code></pre>
<p>获得多数票的最简单的情况似乎是把名单加起来,然后检查它是否定的、正面的还是0。在</p>
<pre><code>>>> 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
</code></pre>
<p>在总数之后,我可以做这个检查以获得多数票,即:</p>
<pre><code>>>> 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
</code></pre>
<p>但如前所述,它很难看:<a href="https://stackoverflow.com/questions/14029245/python-putting-an-if-elif-else-statement-on-one-line">Python putting an if-elif-else statement on one line</a>而且不是Python。在</p>
<p>所以解决办法似乎是</p>
<pre><code>>>> x = [-1, -1, 1, 1, 0]
>>> if sum(x) == 0:
... majority = 0
... else:
... majority = -1 if sum(x) < 0 else 1
...
>>> majority
0
</code></pre>
<hr/>
<h2>已编辑</h2>
<p>但是有些情况下<code>sum()</code>不起作用,@RobertB的例子</p>
<pre><code>>>> x = [-1, -1, 0, 0, 0, 0]
>>> sum(x)
-2
</code></pre>
<p>但在这种情况下,多数票应该是0!!在</p>