Python 2d数组问题

时间:2018-01-16 11:27:51

标签: python list sorting

我已将此作为列表列表,每个列表包含数字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']]

例如,对于第一个列表:

  • 位置1中的1表示candidate1vote1 += 1
  • 第二个位置的2表示candidate2vote2 += 1
  • 第3位的3表示candidate3vote3 += 1

所有0都被忽略但仍被视为空格。对于第二个清单:

  • 第一个位置的1表示candidate1vote1 += 1
  • 第二个位置的3表示candidate3vote2 += 1
  • 第4位的2表示candidate4vote2 += 1

基本上该位置对应于候选人1/2 / 3/4/5,该值对应于第一优先投票,第二优先投票或第三优先投票。

有没有人知道我如何能够使用for / while循环对列表进行排序,以便它通过每次投票并且每次投票都做相应的总和?

2 个答案:

答案 0 :(得分:0)

首先要澄清..所以你打算不仅收集每个候选人的投票,而是每个候选人的偏好投票(1,2,3)?

  1. 了解您正在处理嵌套列表以及如何索引它们。 (你会在numpy库中使用术语数组用于那些类型)
  2. 当您对列表进行索引时,您可以从外到内访问数据。例如[outer] [inner](外部/内部,因为可能有超过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])
    ...