我已将此作为列表列表,每个列表包含数字1 2 3和0(0重复两次)。根据数量和位置,我希望相应的变量每次添加1次。
ballots = [['1', '2', '3', '0', '0'],
['1', '3', '0', '2', '0'],
['1', '2', '3', '0', '0'],
['0', '3', '2', '0', '1'],
['1', '3', '0', '2', '0'],
['2', '0', '3', '1', '0'],
['0', '0', '2', '1', '3'],
['0', '1', '2', '3', '0'],
['0', '1', '0', '2', '3'],
['2', '3', '1', '0', '0'],
['3', '2', '0', '0', '1'],
['0', '1', '3', '2', '0'],
['0', '0', '1', '2', '3'],
['0', '0', '3', '2', '1'],
['1', '2', '3', '0', '0'],
['2', '1', '3', '0', '0'],
['0', '3', '2', '1', '0'],
['0', '2', '3', '0', '1'],
['1', '2', '3', '0', '0'],
['1', '0', '0', '3', '2'],
['2', '1', '3', '0', '0'],
['3', '1', '2', '0', '0'],
['2', '3', '0', '1', '0'],
['0', '0', '3', '1', '2'],
['0', '3', '1', '0', '2'],
['2', '1', '0', '0', '3'],
['2', '0', '0', '1', '3'],
['2', '0', '0', '1', '3'],
['3', '0', '1', '0', '2']]
例如,对于第一个列表:
candidate1vote1 += 1
candidate2vote2 += 1
candidate3vote3 += 1
所有0都被忽略但仍被视为空格。对于第二个清单:
candidate1vote1 += 1
candidate3vote2 += 1
candidate4vote2 += 1
基本上该位置对应于候选人1/2 / 3/4/5,该值对应于第一优先投票,第二优先投票或第三优先投票。
有没有人知道我如何能够使用for / while循环对列表进行排序,以便它通过每次投票并且每次投票都做相应的总和?
答案 0 :(得分:0)
首先要澄清..所以你打算不仅收集每个候选人的投票,而是每个候选人的偏好投票(1,2,3)?
既然你知道这一点,假设你没有内存/时间限制,并且因为你似乎对python不太熟悉..我建议你使用double for循环。让我们制作一个具有偏好的候选人的嵌套列表。他们的外部索引将是候选#,内部列表优先。
len(ballot)
为您提供了行数#,(为了方便起见,我们只说)5。请弄清楚缩进..
candidate = [[0]*4 for n in xrange(5)] //depends on your choice - whether you want to count for number of 0s, if you want to match position and preference..
n = len(ballot)
for i in range(0, n): //python index starts with 0, if you use range it includes the start number but not the last. google if you don't know
for j in range(0, 5):
if ballots[i][j] == '1':
candidate[j][1] +=1
elif ballots[i][j] == '2':
candidate[j][2] +=1
elif ballots[i][j] == '3':
candidate[j][3] +=1
else: //0
candidate[j][0] +=1
答案 1 :(得分:-1)
像这样你可以将每个答案放在一个列表中:
c1= list()
c2= list()
...
for i in ballots:
c1.append(i[0])
c2.append(i[1])
...