Как сделать двумерный список, используя существующий одномерный список для хеширования? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть список целых чисел, таких как: [10, 20, 50, 30], и я хочу посчитать вхождение этих целых чисел в другой список.
Например, если 10 в первом списке дважды входит во второй список с остальнымицелые числа встречаются только один раз, тогда вывод должен быть: [[10:2], [20:1], [50:1], [30:]]

Я пробовал с приведенным ниже кодом, но я получаю ошибку: AttributeError: 'int' object has no attribute 'extend'.Что я делаю не так?

for i in range(0,len(s)):
    s[i].append([])
    for j in range(0,len(ar)):
        if s[i]==ar[j]:
            s[i][0]+=1

Я пытаюсь создать что-то вроде хэш-карты, поделитесь, пожалуйста, любым лучшим подходом, который у вас есть.Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Вы можете использовать оба словаря в Python:

s = [10, 20, 50, 30]
{curr: s.count(curr) for curr in s}
Out[0]: {10: 1, 20: 1, 50: 1, 30: 1}

Вы также можете использовать счетчик коллекции Python следующим образом:

from collections import Counter
Counter(s)
Out[0]: Counter({10: 1, 20: 1, 50: 1, 30: 1})

Ссылки:

  • Список и словарь в Python - здесь
  • Документация счетчика объектов - здесь

Удачи!

0 голосов
/ 03 марта 2019

A Счетчик объект идеально подходит для задачи.

from collections import Counter

wanted = [10, 20, 50, 30]

other_list = [10, 20, 10, 40, 60, 50, 100, 70]

wanted_set = frozenset(wanted)
counts = Counter([number for number in other_list if number in wanted_set])

print(counts)

# Access the count for every number.
for number in counts:
    print('{0}: {1}'.format(number, counts[number]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...