Форум сайта python.su
0
Сгенерируйте 2 списка из n целых чисел. Определите какие числа и в каком количестве содержаться одновременно как в первом списке, так и во втором.
Допустим есть два списка
1 - 0, 1, 2, 0, 3, 2
2 - 0, 0, 2, 3, 3, 3
Какие числа в обоих: 0, 2, 3
В каком колличестве: что это значит? типо нулей - 4, двоек - 3 и т.д.
или что их просто 3 числа.
Мозг потёк…
Офлайн
221
Прям потек? А что вам мешает сделать и так и сяк и по разному? Если указано про “какие числа”, то далее явно не имелось ввиду про общее количество. Необходимо найти
San4az
типо нулей - 4, двоек - 3 и т.д.
Офлайн
857
San4azЭто значит, что надо найти общие числа, а потом для каждого такого числа вывести его количество в каждом списке. И всё это нужно сделать за один проход.
В каком колличестве: что это значит?
>>> 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)} >>>
Офлайн
186
>> 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}
Офлайн
103
>>> 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]}
Офлайн
857
terabaytИспользование .count() приводит к сложности O(n ^ 2), тогда как однопроходный алгоритм приводит к сложности O(n).lambda x: x.count(i)
Отредактировано py.user.next (Дек. 1, 2015 23:50:10)
Офлайн
20
py.user.nextОдна строчка же…
Офлайн
103
noob_saibotта и не в этом деле
Одна строчка же
Офлайн