Найти - Пользователи
Полная версия: Как вы понимаете это задание... мозг сломался...
Начало » Python для новичков » Как вы понимаете это задание... мозг сломался...
1
San4az
Сгенерируйте 2 списка из n целых чисел. Определите какие числа и в каком количестве содержаться одновременно как в первом списке, так и во втором.

Допустим есть два списка
1 - 0, 1, 2, 0, 3, 2
2 - 0, 0, 2, 3, 3, 3

Какие числа в обоих: 0, 2, 3
В каком колличестве: что это значит? типо нулей - 4, двоек - 3 и т.д.
или что их просто 3 числа.

Мозг потёк…
JOHN_16
Прям потек? А что вам мешает сделать и так и сяк и по разному? Если указано про “какие числа”, то далее явно не имелось ввиду про общее количество. Необходимо найти
San4az
типо нулей - 4, двоек - 3 и т.д.
py.user.next
San4az
В каком колличестве: что это значит?
Это значит, что надо найти общие числа, а потом для каждого такого числа вывести его количество в каждом списке. И всё это нужно сделать за один проход.

Применяешь collections.Counter() к каждому списку, а потом выбираешь пересечение ключей у полученных словарей.

>>> import collections
>>> 
>>> def f(lst1, lst2):
...     c1 = collections.Counter(lst1)
...     c2 = collections.Counter(lst2)
...     inter = set(c1).intersection(c2)
...     out = {k:(c1[k], c2[k]) for k in inter}
...     return out
... 
>>> f([0, 0], [0, 0, 0])
{0: (2, 3)}
>>> f([0, 1], [0, 1, 0])
{0: (1, 2), 1: (1, 1)}
>>> f([1, 2, 3, 1, 2], [1, 2, 5, 1, 4])
{1: (2, 2), 2: (2, 1)}
>>>
Rodegast
>> a = [0, 1, 2, 0, 3, 2]
>> b = [0, 0, 2, 3, 3, 3]
>> c = a + b
>> { k:c.count(k) for k in set(s)}
>> {0: 4, 1: 1, 2: 3, 3: 4}
Я думаю что отфильтровать значения == 1 ты сам сможешь.
terabayt
>>> f = lambda *args: {i: map(lambda x: x.count(i), args) for i in reduce(set.__rand__, map(set, args))}
>>> 
>>> print f([0, 0], [0, 0, 0])
{0: [2, 3]}
>>> print f([0, 1], [0, 1, 0])
{0: [1, 2], 1: [1, 1]}
>>> print f([1, 2, 3, 1, 2], [1, 2, 5, 1, 4])
{1: [2, 2], 2: [2, 1]}
>>> print f([1, 2, 3, 1, 2], [1, 2, 5, 1, 4], [1, 3, 2], [1, 2, 5, 1, 4])
{1: [2, 2, 1, 2], 2: [2, 1, 1, 1]}
>>> print f([1, 2, 3, 1, 2])
{1: [2], 2: [2], 3: [1]}
py.user.next
terabayt
lambda x: x.count(i)
Использование .count() приводит к сложности O(n ^ 2), тогда как однопроходный алгоритм приводит к сложности O(n).
noob_saibot
py.user.next
Одна строчка же…
terabayt
noob_saibot
Одна строчка же
та и не в этом деле
прост показал один с вариантов
на маленькие списки он работает быстрее
да и без доп модулей
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB