Всплывающие списки - Типичный вопрос о парах носков (Python) - PullRequest
2 голосов
/ 14 марта 2020

Мне поставили следующую задачу:

Напишите функцию, которая возвращает количество пар носков. Пара носков состоит из двух одинаковых букв, таких как «AA». Носки представлены в виде неупорядоченной последовательности.

SockPairs ("AABB") ➞ 1

Мой код .. не работает. Я пытаюсь использовать метод pop, чтобы заполнить новый список для буквы A, но я не могу понять это.

Я работаю над этим с того утра, как в 6 утра, мой мозг напичкан университетскими отчетами (смеется). Кто-нибудь может дать мне какой-нибудь совет для достижения такого решения моего кода?

Все, что я хочу, это посмотреть, будет ли заполняться мой новый список, если в моем исходном списке есть символ «А».

Если у кого-нибудь есть решение моей проблемы, я буду вечно благодарен.

mySocks = ("AA")
mySocks = list(mySocks)

popped_ar = []
popped_ar = mySocks.pop()

A = []

while len(mySocks) != 0:
    for x in A:
        if "A" in popped_ar:
            A.append(mySocks.pop())



print (A)


Ответы [ 2 ]

3 голосов
/ 14 марта 2020

Коллекции упрощают такие задачи:

>>> from collections import Counter
>>> socks = "ACABBACBBAACCDDB"
>>> sum(x // 2 for x in Counter(socks).values())
7

Это работает, сначала сопоставляя каждую букву количеству ее вхождений. После этого пола делят каждый счетчик событий на два, так что 8 становится 4, а 7 становится 3 (мы не можем создать пару с нечетным числом). Взять сумму.

Без сборов это то же самое, что и:

socks = "ACABBACBBAACCDDB"
counts = {}

for sock in socks:
    if sock not in counts:
        counts[sock] = 0

    counts[sock] += 1

pairs = sum(x // 2 for x in counts.values())
1 голос
/ 14 марта 2020

Попробуйте это:

socks = "ABCAMMCSAASBB"
socks_counter = dict()

# Count the number of socks of each type
for sock in socks:
    if sock in socks_counter:
        socks_counter[sock] += 1
    else:
        socks_counter[sock] = 1

# Prepare the socks pairs
for key in socks_counter:
    socks_counter[key] = socks_counter[key] // 2

print("Number of socks pairs for each type:", socks_counter)
print("Total pairs of socks:", sum(socks_counter.values()))

Вывод:

Number of socks pairs for each type: {'A': 2, 'B': 1, 'C': 1, 'M': 1, 'S': 1}
Total pairs of socks: 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...