Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2015 21:59:20

San4az
Зарегистрирован: 2015-11-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как вы понимаете это задание... мозг сломался...

Сгенерируйте 2 списка из n целых чисел. Определите какие числа и в каком количестве содержаться одновременно как в первом списке, так и во втором.

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

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

Мозг потёк…

Офлайн

#2 Ноя. 30, 2015 22:39:52

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как вы понимаете это задание... мозг сломался...

Прям потек? А что вам мешает сделать и так и сяк и по разному? Если указано про “какие числа”, то далее явно не имелось ввиду про общее количество. Необходимо найти

San4az
типо нулей - 4, двоек - 3 и т.д.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 1, 2015 00:58:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как вы понимаете это задание... мозг сломался...

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)}
>>>



Офлайн

#4 Дек. 1, 2015 13:49:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Как вы понимаете это задание... мозг сломался...

>> 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 ты сам сможешь.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Дек. 1, 2015 19:03:33

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как вы понимаете это задание... мозг сломался...

>>> 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]}



————————————————
-*- Simple is better than complex -*-

Офлайн

#6 Дек. 1, 2015 23:48:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как вы понимаете это задание... мозг сломался...

terabayt
lambda x: x.count(i)
Использование .count() приводит к сложности O(n ^ 2), тогда как однопроходный алгоритм приводит к сложности O(n).



Отредактировано py.user.next (Дек. 1, 2015 23:50:10)

Офлайн

#7 Дек. 2, 2015 09:08:12

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Как вы понимаете это задание... мозг сломался...

py.user.next
Одна строчка же…

Офлайн

#8 Дек. 2, 2015 21:53:46

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как вы понимаете это задание... мозг сломался...

noob_saibot
Одна строчка же
та и не в этом деле
прост показал один с вариантов
на маленькие списки он работает быстрее
да и без доп модулей



————————————————
-*- Simple is better than complex -*-

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version