Функция для получения пары чисел в заданном списке чисел в Python - PullRequest
0 голосов
/ 27 ноября 2018

Я пишу функцию, которая пытается вернуть целое число, представляющее количество совпадающих пар чисел в данном списке.Ниже приведен код.

def testfunc(n, ar):
    count = []
    ar.sort()
    print(ar)
    if len(ar) == n:
        for i in range(len(ar)):
            for j in range(i+1, len(ar)):
                if ar[i] == ar[j]:
                    count.append(1)
                    if ar[i+1] == ar[j+1]:
                        count.append(1)
                        break
    return len(count)

Работает, когда входной сигнал подобен указанному ниже, тестовый пример 1, но не проходит, когда это тестовый пример 2.

тестовый пример 1:

n = 9
ar = [10, 20, 20, 10, 10, 30, 50, 10, 20]

testдело 2:

n = 10
ar = [1, 1, 3, 1, 2, 1, 3, 3, 3, 3]

Пожалуйста, сообщите, какую ошибку я совершаю.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Если вы подсчитываете количество вхождений каждого элемента в списке, получая сопоставление элементов для подсчета, количество совпадающих пар элемента является количеством этого элемента, разделенным на 2, округленным в меньшую сторону.Мы можем использовать collections.Counter для подсчета предметов, а деление по полу //, чтобы получить количество подходящих пар для каждого предмета.

from collections import Counter

def testfunc(arr):
    return sum(v//2 for v in Counter(arr).values())

print(testfunc([10, 20, 20, 10, 10, 30, 50, 10, 20])) # 3
print(testfunc([1, 1, 3, 1, 2, 1, 3, 3, 3, 3]))       # 4
print(testfunc([2,2,3,3,5,8,5,9,8]))                  # 4

Нет необходимости передавать длину списка, потому что вы всегда можете получить длину списка, вызвав len(arr).

0 голосов
/ 27 ноября 2018

при переходе по длине массива в

if arg[i+1] == arg[j+1]:
попробуйте это, оно должно работать в обоих случаях.
def testfunc(ar):
    ar.sort();
    count = i = 0
    while i + count < len(ar) - 1:
        if ar[count + i] == ar[count + i + 1]:
            count += 1
        i += 1
    return count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...