Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Решаю на codewars.com задачки, вот спустя 10 решенных дошёл к этому: (собстна по факту я решил, но читайте)

 

Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.

It should remove all values from list a, which are present in list b.

 

Для тех, кто не понимает казахский: нужно написать функцию от 2 аргументов a и b типа list, такую, что если в списке нашелся элемент из списка b , то со списка a он и ему равные убираются. (в некст спойлере внизу пример аргументов и того, что от них получается)

Вроде как не сложно, хотя я потратил пол часа чтобы понять и написать на листочке алгоритм как оно все работает AnimeRage.png?1553802560 И ещё так же, чтобы написать код.

В итоге с моим написанным алгоритмом пришлось для этой задачки создавать еще одну функцию delete(A, n) , которая выдает новый список C который равняется A без A итых = n. delete([2, 3, 3, 1], 3) = [2, 1]

 

Ну и собстна код

И вроде все идеально (хоть и код офк убогий, уверен какой нить хацкер за 2 если не за 1 строчку уложился бы, но я треню алгоритмы а не кодерство)

Запускаю, и рил показывает, что все найсYe.gif?1542825806 (но это онли 5 базовых тестов)

Спойлер:

JXYa3OW.png

На нажимаю Attemp (которая запускает еще миллиард разных рандомных тестов) 

 

И найс, минус два часа жизни. Как видите, ошибки только с списками, которые причем содержат уже в самом результате None

что за рофл? у меня рил горит. Где я обосрался, есть ли тут проффешионал людишки? Спасибо

Спойлер:

pjiXcgg.png

 

 

 

 

Trash Monster

Пользователь

Регистрация: 11.10.2018

Сообщения: 466

Рейтинг: 458

Trash Monster

Регистрация: 11.10.2018

Сообщения: 466

Рейтинг: 458

@LALex377 суммоню лучшего в этом dankpepe.png

SweetSweetLoot

Пользователь

Регистрация: 06.07.2015

Сообщения: 4739

Рейтинг: 1149

SweetSweetLoot

Регистрация: 06.07.2015

Сообщения: 4739

Рейтинг: 1149

img

Используй команду ин дли списка или смотри число элементов

Salovar

Пользователь

Регистрация: 12.07.2017

Сообщения: 4806

Рейтинг: 1027

Salovar

Регистрация: 12.07.2017

Сообщения: 4806

Рейтинг: 1027

Я сейчас не вспомню, но у лутца ж расписанна работа со словарями и там именно этот пример был

zzzwebxxx

Пользователь

Регистрация: 15.09.2015

Сообщения: 86

Рейтинг: 18

zzzwebxxx

Регистрация: 15.09.2015

Сообщения: 86

Рейтинг: 18

img

Превращаешь в кортеж и делаешь diff между кортежами. ез

upd. вспомнил)

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

zzzwebxxx сказал(а):

Превращаешь в кортеж и делаешь diff между кортежами. ез

upd. вспомнил)

Нажмите, чтобы раскрыть...

да я в курсе, что мой способ плохой, он самый нубский. Но я про то, почему у меня выдает не то именно с теми, в которых должно где-то каким-то образом выйти None.

Тем более не особо то и знаю, что это. я по лекциям Тимофея Хирьянова учусь

Till_Its_Gone

Пользователь

Регистрация: 14.04.2020

Сообщения: 562

Рейтинг: -2

Нарушения: 100

Till_Its_Gone

Регистрация: 14.04.2020

Сообщения: 562

Рейтинг: -2

Нарушения: 100

list1.removeAll(list2) 

ISSOU.png

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Till_Its_Gone сказал(а):

list1.removeAll(list2) 

ISSOU.png

Нажмите, чтобы раскрыть...

кек, я хотел сам написать эту функцию

 

Graundefined

Пользователь

Регистрация: 01.11.2013

Сообщения: 1435

Рейтинг: 2373

Graundefined

Регистрация: 01.11.2013

Сообщения: 1435

Рейтинг: 2373

a = [1, 2, 3, 4, 5]

b = [1, 3, 5, 2, 1]

 

def kek(a, b):

for item in b:

if b in a:

a[a.index(b)] = None

 

 

 

a = [item for item in a if item is not None]

 

 

 

zzzwebxxx сказал(а):

Превращаешь в кортеж и делаешь diff между кортежами. ез

upd. вспомнил)

Нажмите, чтобы раскрыть...

Ну множества сработают если нет повторов, тут именно списки

zzzwebxxx

Пользователь

Регистрация: 15.09.2015

Сообщения: 86

Рейтинг: 18

zzzwebxxx

Регистрация: 15.09.2015

Сообщения: 86

Рейтинг: 18

img
EnjoyThePain сказал(а):

кек, я хотел сам написать эту функцию

 

Нажмите, чтобы раскрыть...

Ну смотри.

 

Первое что стоит проверить, что если в списке нет элементов которые ты ищешь. Второе, что если их больше чем 1.

Насколько я помню remove удаляет только первое совпадение, а не все.

saw_tooth

Пользователь

Регистрация: 20.08.2013

Сообщения: 5550

Рейтинг: 3286

saw_tooth

Регистрация: 20.08.2013

Сообщения: 5550

Рейтинг: 3286

f = [1,2,3,4,5] = откуда удаляем

g = [3,4,6,7] = что удаляем

list(filter(lambda x: x not in g, f))

result: [1, 2, 5]

 

в функцию сам оформишь

zzzwebxxx

Пользователь

Регистрация: 15.09.2015

Сообщения: 86

Рейтинг: 18

zzzwebxxx

Регистрация: 15.09.2015

Сообщения: 86

Рейтинг: 18

img
Graundefined сказал(а):

a = [1, 2, 3, 4, 5]

b = [1, 3, 5, 2, 1]

 

def kek(a, b):

for item in b:

if b in a:

a[a.index(b)] = None

 

 

a = [item for item in a if item is not None]

 

 

Ну множества сработают если нет повторов, тут именно списки

Нажмите, чтобы раскрыть...

Если список превратить в множество, все повторы удаляться 

FreeM@n

Пользователь

Регистрация: 06.03.2013

Сообщения: 1993

Рейтинг: 4221

FreeM@n

Регистрация: 06.03.2013

Сообщения: 1993

Рейтинг: 4221

img

Просто сетом удаляй повторы и не парься.

Graundefined

Пользователь

Регистрация: 01.11.2013

Сообщения: 1435

Рейтинг: 2373

Graundefined

Регистрация: 01.11.2013

Сообщения: 1435

Рейтинг: 2373

a = [1, 2, 3, 4, 5]

b = [1, 3, 5, 2, 1]

 

def kek(a, b):

    for item in b:

        if item in a:

            del a[a.index(item)]

            

kek(a, b)

 

Output: 4

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

FreeM@n сказал(а):

Просто сетом удаляй повторы и не парься.

Нажмите, чтобы раскрыть...

учусь просто по курсу, там челик не сильно говорит про встроенные функции в питон, типа больше курс не по программированию а алгоритмам. А заглядывать постоянно лень

FreeM@n

Пользователь

Регистрация: 06.03.2013

Сообщения: 1993

Рейтинг: 4221

FreeM@n

Регистрация: 06.03.2013

Сообщения: 1993

Рейтинг: 4221

img
EnjoyThePain сказал(а):

типа больше курс не по программированию а алгоритмам

Нажмите, чтобы раскрыть...

Так это самые что ни на есть алгоритмы. Сет в питоне - аналог математического множества, причем содержащего только уникальные (неповторяющиеся) элементы.

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

FreeM@n сказал(а):

Так это самые что ни на есть алгоритмы. Сет в питоне - аналог математического множества, причем содержащего только уникальные (неповторяющиеся) элементы.

Нажмите, чтобы раскрыть...

Понял, ну я ещё не дошёл

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8637

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8637

Посмотрел твое решение. Это странно, что тесты не проходят: в списках в результатах откуда-то берется None, хотя есть проверка на него, и у меня на компьютере вроде все работает как надо

 

P.S. сет тут никак не поможет

Hy6o_Hy6

Пользователь

Регистрация: 16.11.2013

Сообщения: 3527

Рейтинг: 2188

Hy6o_Hy6

Регистрация: 16.11.2013

Сообщения: 3527

Рейтинг: 2188

EnjoyThePain сказал(а):

Решаю на codewars.com задачки, вот спустя 10 решенных дошёл к этому: (собстна по факту я решил, но читайте)

 

Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.

It should remove all values from list a, which are present in list b.

 

Для тех, кто не понимает казахский: нужно написать функцию от 2 аргументов a и b типа list, такую, что если в списке нашелся элемент из списка b , то со списка a он и ему равные убираются. (в некст спойлере внизу пример аргументов и того, что от них получается)

Вроде как не сложно, хотя я потратил пол часа чтобы понять и написать на листочке алгоритм как оно все работает AnimeRage.png?1553802560 И ещё так же, чтобы написать код.

В итоге с моим написанным алгоритмом пришлось для этой задачки создавать еще одну функцию delete(A, n) , которая выдает новый список C который равняется A без A итых = n. delete([2, 3, 3, 1], 3) = [2, 1]

 

Ну и собстна код

И вроде все идеально (хоть и код офк убогий, уверен какой нить хацкер за 2 если не за 1 строчку уложился бы, но я треню алгоритмы а не кодерство)

Запускаю, и рил показывает, что все найсYe.gif?1542825806 (но это онли 5 базовых тестов)

Спойлер:

JXYa3OW.png

На нажимаю Attemp (которая запускает еще миллиард разных рандомных тестов) 

 

И найс, минус два часа жизни. Как видите, ошибки только с списками, которые причем содержат уже в самом результате None

что за рофл? у меня рил горит. Где я обосрался, есть ли тут проффешионал людишки? Спасибо

Спойлер:

pjiXcgg.png

 

 

 

 
Нажмите, чтобы раскрыть...

кинь ссылку на задачу 

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8637

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8637

Там в обсуждении есть чел с такой же проблемой, дело в том, что при проходе циклом по списку ты изменяешь его

Hy6o_Hy6

Пользователь

Регистрация: 16.11.2013

Сообщения: 3527

Рейтинг: 2188

Hy6o_Hy6

Регистрация: 16.11.2013

Сообщения: 3527

Рейтинг: 2188

EnjoyThePain сказал(а):

Решаю на codewars.com задачки, вот спустя 10 решенных дошёл к этому: (собстна по факту я решил, но читайте)

 

Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.

It should remove all values from list a, which are present in list b.

 

Для тех, кто не понимает казахский: нужно написать функцию от 2 аргументов a и b типа list, такую, что если в списке нашелся элемент из списка b , то со списка a он и ему равные убираются. (в некст спойлере внизу пример аргументов и того, что от них получается)

Вроде как не сложно, хотя я потратил пол часа чтобы понять и написать на листочке алгоритм как оно все работает AnimeRage.png?1553802560 И ещё так же, чтобы написать код.

В итоге с моим написанным алгоритмом пришлось для этой задачки создавать еще одну функцию delete(A, n) , которая выдает новый список C который равняется A без A итых = n. delete([2, 3, 3, 1], 3) = [2, 1]

 

Ну и собстна код

И вроде все идеально (хоть и код офк убогий, уверен какой нить хацкер за 2 если не за 1 строчку уложился бы, но я треню алгоритмы а не кодерство)

Запускаю, и рил показывает, что все найсYe.gif?1542825806 (но это онли 5 базовых тестов)

Спойлер:

JXYa3OW.png

На нажимаю Attemp (которая запускает еще миллиард разных рандомных тестов) 

 

И найс, минус два часа жизни. Как видите, ошибки только с списками, которые причем содержат уже в самом результате None

что за рофл? у меня рил горит. Где я обосрался, есть ли тут проффешионал людишки? Спасибо

Спойлер:

pjiXcgg.png

 

 

 

 
Нажмите, чтобы раскрыть...

чел у тебя там ошибка в коде, смени язык на нормальный 

nvKuQGZzT8edLPBO0ZIjIQ.png

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Mooneater сказал(а):

Посмотрел твое решение. Это странно, что тесты не проходят: в списках в результатах откуда-то берется None, хотя есть проверка на него, и у меня на компьютере вроде все работает как надо

 

P.S. сет тут никак не поможет

Нажмите, чтобы раскрыть...

Да, я тоже вот поэтому и создал тему. Вроде это вообще  не возможно, только в моей функции 1-ой он используется и тут же убирается 

Hy6o_Hy6 сказал(а):

кинь ссылку на задачу 

Нажмите, чтобы раскрыть...

вот вроде 

https://www.codewars.com/kata/523f5d21c841566fde000009/train/python/5eb45319c752ac0028ecfa5a

FreeM@n

Пользователь

Регистрация: 06.03.2013

Сообщения: 1993

Рейтинг: 4221

FreeM@n

Регистрация: 06.03.2013

Сообщения: 1993

Рейтинг: 4221

img
Mooneater сказал(а):

P.S. сет тут никак не поможет

Нажмите, чтобы раскрыть...

Если я правильно понял задачу, то поможет.

Спойлер: "тык"

def remove_same_elements(a, b):

    return list(set(a)-set(b))

a = [1, 2, 3, 4, 5, 6, 7, 8]

b = [1, 3, 5, 7, 10]

print(remove_same_elements(a,b))

Не самое элегантное решение конечно, но всё же.

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8637

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8637

EnjoyThePain сказал(а):

Да, я тоже вот поэтому и создал тему. Вроде это вообще  не возможно, только в моей функции 1-ой он используется и тут же убирается 

вот вроде 

https://www.codewars.com/kata/523f5d21c841566fde000009/train/python/5eb45319c752ac0028ecfa5a

Нажмите, чтобы раскрыть...

Добавь в array_diff перед циклами

x = a.copy()

замени делит на x = delete(x, j)

и конец на return x

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Mooneater сказал(а):

Добавь в array_diff перед циклами

x = a.copy()

замени делит на x = delete(x, j)

и конец на return x

Нажмите, чтобы раскрыть...

супер спасибо. Я так понял, ты просто сделал ссылку на список а?, тем самым его ты не меняешь, или как?

Тема закрыта