首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改`voting_approval`的输出

更改`voting_approval`的输出
EN

Stack Overflow用户
提问于 2012-11-30 11:05:38
回答 5查看 185关注 0票数 0

我正在尝试编写一个接受参数的函数,该参数是一个由4个元素组成的列表,这些列表表示单次骑行的批准选票;内部列表元素的顺序对应于各方在名为PARTY_INDICES的各方列表中的顺序。

投赞成票最多的政党获胜。

它应该返回一个2元组,其中第一个元素是获胜方的名字,第二个元素是一个四元素列表,其中包含每个政党的赞成票数量。列表元素的顺序与PARTY_INDICES中各方的顺序相对应。

我的代码是:

代码语言:javascript
复制
def voting_approval(approval):
    parties = ['NDP','GREEN','LIBERAL','CPC']
    values = [0,0,0,0]
    for decision in approval:
        for no, item in enumerate(decision):
            if item == 'Yes':
                values[no] += 1
                total = [(values) for x in zip(approval)]

    return (parties[values.index(max(values))], total)

如果我尝试:

代码语言:javascript
复制
voting_approval([['Yes', 'No', 'Yes', 'No'],['No', 'No', 'Yes', 'No']])

它会吐出:

代码语言:javascript
复制
('LIBERAL', [[1, 0, 2, 0], [1, 0, 2, 0]])

但我希望结果是:

代码语言:javascript
复制
('LIBERAL', [1, 0, 2, 0])
EN

回答 5

Stack Overflow用户

发布于 2012-11-30 11:26:40

没有进行过广泛的测试,但您可以尝试:

代码语言:javascript
复制
In [7]: def voting_approval(approval):
   ...:     parties = ['NDP', 'GREEN', 'LIBERAL', 'CPC']
   ...:     values = [sum(1 if i == 'Yes' else 0 for i in group) for group in zip(*approval)]
   ...:
   ...:     return (parties[values.index(max(values))], values)
   ...:

In [8]: voting_approval([['Yes', 'No', 'Yes', 'No'],['No', 'No', 'Yes', 'No']])
Out[8]: ('LIBERAL', [1, 0, 2, 0])

这将在开始时将你的列表压缩在一起,对Yes求和并创建一个带有总数的新列表,然后用它来提取所需的信息。如果这不是你想要的,我很乐意调整。

票数 0
EN

Stack Overflow用户

发布于 2012-11-30 11:27:08

您已经在values中存储了每一方的“YES”数量。只需按如下所示更改代码即可。

代码语言:javascript
复制
def voting_approval(approval):
    parties = ['NDP','GREEN','LIBERAL','CPC']
    values = [0,0,0,0]
    for decision in approval:
        for no, item in enumerate(decision):
            if item == 'Yes':
                values[no] += 1

    return (parties[values.index(max(values))], values)
票数 0
EN

Stack Overflow用户

发布于 2012-11-30 11:32:50

您不需要这个total变量。values已经是你想要的了。

代码语言:javascript
复制
def voting_approval(approval):
    parties = ['NDP','GREEN','LIBERAL','CPC']
    values = [0,0,0,0]
    for decision in approval:
        for no, item in enumerate(decision):
            if item == 'Yes':
                values[no] += 1

    return (parties[values.index(max(values))], values)

approvals = [
    ['Yes', 'No', 'Yes', 'No'],
    ['No', 'No', 'Yes', 'No'],
]

print voting_approval(approvals)

代码语言:javascript
复制
matt@wraith:~/Dropbox/Public/StackOverflow$ python 13638424.py 
('LIBERAL', [1, 0, 2, 0])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13638424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档