Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2014 15:25:36

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

Задача со списками.

Всем привет)
Требуется помощь в написании программы)
Вот условие:
“Даны два неубывающих списка x и y. Найти их пересечение, то есть неубывающий список z, содержащий их общие элементы, причем кратность каждого элемента в списке z равна минимуму его кратностей в списках x и y.”
Не использовать функции для списков.

Отредактировано SafeNuts (Ноя. 12, 2014 21:09:19)

Офлайн

#2 Ноя. 12, 2014 15:32:14

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

Задача со списками.

SafeNuts
причем кратность каждого элемента в списке z равна минимуму его кратностей в списках x и y.”
не понял, можно пример?



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

Офлайн

#3 Ноя. 12, 2014 15:41:12

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

Задача со списками.

terabayt
Да, конечно)
То есть если в одном из списков общие элементы встречаются разное количество раз то нужно в z поместить меньшее количество раз этот элемент)

Отредактировано SafeNuts (Ноя. 12, 2014 15:41:34)

Офлайн

#4 Ноя. 12, 2014 18:39:08

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Задача со списками.

не уверен, что верно понял задание…

list1 = ['a', 'a', 'b', 'b', 'c', 'd']
list2 = ['a', 'b', 'b', 'e', 'f', 'b']
def blah(list1, list2):
    list3 = []
    for x in set(list1):
        if x in list2:
            x_min = min(list1.count(x), list2.count(x))
            for i in range(x_min):
                list3.append(x)
    return list3
>>> blah(list1, list2)
['a', 'b', 'b']

Офлайн

#5 Ноя. 12, 2014 20:07:32

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

Задача со списками.

list1 = ['a', 'a', 'b', 'b', 'c', 'd']
list2 = ['a', 'b', 'b', 'e', 'f', 'b']
a = []
for j in (i for i in set(list1) if i in list2):
    a += j*min(list1.count(j), list2.count(j))
print a #['a', 'b', 'b']



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

Отредактировано terabayt (Ноя. 12, 2014 20:08:06)

Офлайн

#6 Ноя. 12, 2014 21:08:55

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

Задача со списками.

terabayt
botinag
Огромное спасибо)
Есть только одна проблема, нужны эти функции но без использования строеных функций списков(Только что сам об этом узнал(Прошу прощения(

Отредактировано SafeNuts (Ноя. 12, 2014 21:09:37)

Офлайн

#7 Ноя. 12, 2014 21:37:23

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

Задача со списками.

for j in (i for i in list1 if i in list2):
    if a.count(j) < list2.count(j):
        a += j
функции не используются, но используются методы (count)



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

Офлайн

#8 Ноя. 12, 2014 21:44:31

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

Задача со списками.

а вот и без встроенных методов

def count(a, s):
    return len([i for i in a if i == s])
a = []
for j in (i for i in list1 if i in list2):
    if count(a, j) < count(list2, j):
        a += j
print a # ['a', 'b', 'b']
или так
def count(a, s):
    return len([i for i in a if i == s])
a = []
[a.append(j) if count(a, j) < count(list2, j) else [] for j in (i for i in list1 if i in list2)]
print a # ['a', 'b', 'b']



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

Отредактировано terabayt (Ноя. 12, 2014 21:55:59)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version