我正在尝试编写一个函数,该函数接受一个参数,该参数是一个4元素列表的列表,表示单次骑行的批准选票;内部列表元素的顺序对应于名为PARTY_INDICES
的各方列表中各方的顺序。
投票数最多的一方获胜。
它应返回一个2元组,其中第一个元素是获胜方的名称,第二个元素是包含每个方的是投票数的四元素列表。列表元素的顺序对应于PARTY_INDICES
中的各方的顺序。
这是我到目前为止所做的:
def voting_approval(approval):
''' (list of list of str) -> tuple of (str, list of int)
In Approval Voting, the party that receives the most YES votes wins the seat.
'''
parties=['NDP','GREEN','LIBERAL','CPC']
totals = [sum('YES') for x in zip(*approval)]
win_party = parties[totals.index(max(totals))]
return (win_party, totals)
但是,当我尝试voting_approval(['YES','NO','YES','NO'],['YES','NO','YES','YES'],['YES','YES','YES','YES'])
时。
我收到以下错误:
builtins.TypeError: voting_approval() takes exactly 1 positional argument (3 given)
答案 0 :(得分:0)
如果不尝试对函数进行故障排除,则错误的原因在于,当只需要一个参数时,您将3个列表作为参数传递给函数。
您可以采用的另一种方式是:
def vote(arg):
parties = ['NDP','GREEN','LIBERAL','CPC']
values = [0,0,0,0]
for lis in arg:
for no, item in enumerate(lis):
if item == 'Yes':
values[no] += 1
return (parties[values.index(max(values))], max(values))
然后使用它:
vote([['Yes', 'No', 'Yes', 'No'],['No', 'No', 'Yes', 'No']])
返回('LIBERAL',2)
答案 1 :(得分:0)
我会解决看似你的主要问题,计算“是”投票的数量。
party_list = ['foo','bar','zoo']
yes_votes = {}
sample_votes = [['no','yes','no'],['yes','yes','no'],['no','no','no']]
for inner_list in sample_votes:
for party_index, vote in enumerate(inner_list):
if vote.lower() == 'yes':
if party_list[party_index] not in yes_votes:
yes_votes[party_list[party_index]] = 1
else:
yes_votes[party_list[party_index]] += 1
print 'Winner is ',max(yes_votes, key=lambda x: yes_votes[x])