在函数调用中无法理解`TypeError`

时间:2012-11-30 01:40:03

标签: python list

我正在尝试编写一个函数,该函数接受一个参数,该参数是一个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)

2 个答案:

答案 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])