Python:我的代码中的索引逻辑有什么问题?

时间:2016-11-02 04:40:41

标签: python indexing

“您将获得一个n个整数和整数k的数组。查找并打印(i,j)对的数量,其中i<j and a[i] + a[j]可被k整除。”

示例输入为:

6 3
1 3 2 6 1 2

其中6是n,3是k,第二行是整数数组。此输入的输出为5。

这是我的代码,但我没有通过测试用例,而且几乎是肯定的,它与我如何索引它有关。

import sys


n,k = input().strip().split(' ')
n,k = [int(n),int(k)]
a = [int(a_temp) for a_temp in input().strip().split(' ')]

count=0;

for i in range(n):
    curr = n-i
    for j in range(curr):
        if i < i + j:
            if k % (a[i] + a[i+j]) ==0:
                count = count + 1

print(count)

此外,后续问题:这种方法我是否正在接近一种有效的方法呢?

3 个答案:

答案 0 :(得分:2)

  • k % ...表示“k可被......整除”,而不是“......可被k整除”。
  • if i < i + j不是很有用;你最好不要做富拉斯在评论中推荐的内容。

答案 1 :(得分:2)

你可以试试这个......

import sys 
n,k = input().strip().split(' ') 
n,k = [int(n),int(k)] 
a = [int(a_temp) for a_temp in input().strip().split(' ')]        
print(sum([1 for i in range(n) for j in range(i) if (a[i]+a[j])%k==0]))

答案 2 :(得分:0)

您需要的是使用itertools.combinations

from itertools import combinations

count = 0
for i, j in combinations(range(n), 2):
    if i < j and (a[i] + a[j]) % k == 0:
        print i, j
        count += 1

讨论

  1. range(n)返回索引列表0 .. n-1
  2. combinations(range(n), 2)将生成两个索引的列表(没有重复)
  3. (a[i] + a[j]) % k == 0是您要求的测试
  4. 请注意combinations将产生i,j对,其中i总是小于j,但测试i < j是偏执量