Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2015 15:37:24

0x420
Зарегистрирован: 2015-07-26
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

http://pastebin.com/1QTKTkDG

def clean_list(list_to_clean):
    def del_list(list, x):
        dellist = []
        ter = (len(list)-1-x)
        y = x+1
        for i in range(ter):
            if list[x]==list[y] and type(list[x])== type(list[y]):
                dellist.append(y)
            y=y+1
        return dellist
    lent = len(list_to_clean)
    b = []
    x = 0
    for i in range(lent-1):
        b.extend(del_list(list_to_clean, x))
        x = x+1
       
    b = list(set(b))[::-1]
    for i in b:
        del list_to_clean[i]
 
    return list_to_clean

Сделал программу, проходит проверки, но когда для проверки беру такой список:
[0, 'q', 'qq', 'qqq', 'qqq', 'qqq', 'qqqq', 0, 'qqq']
выдает ошибку. не могу разобраться в чем же проблема
очень прошу помочь.

Офлайн

#2 Сен. 16, 2015 15:39:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

0x420
выдает ошибку
ГДЕ ОШИБКА?



Офлайн

#3 Сен. 16, 2015 15:48:41

0x420
Зарегистрирован: 2015-07-26
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

a = [0, 'q', 'qq', 'qqq', 'qqq', 'qqq', 'qqqq', 0, 'qqq']
>>>

Traceback (most recent call last):
File “D:\22.py”, line 26, in <module>
print clean_list(a)
File “D:\22.py”, line 22, in clean_list
del list_to_clean
IndexError: list assignment index out of range
>>>

Отредактировано 0x420 (Сен. 16, 2015 15:49:40)

Офлайн

#4 Сен. 16, 2015 15:55:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

А что за задача? Давайте мы лучше по-своему напишем, а то в вашем коде ковыряться это то еще удовольствие.



Офлайн

#5 Сен. 16, 2015 15:57:55

0x420
Зарегистрирован: 2015-07-26
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

Это задача с онлайн курсов

ПРАКТИЧНЕ ЗАВДАННЯ 5.1 (1.2/1.5 балів)
Розробити функцію clean_list(list_to_clean),
яка приймає 1 аргумент – список будь-яких значень (рядків, цілих та дійсних чисел) довільної довжини,
та повертає список, який складається з тих самих значень, але не містить повторів елементів. Це значить, що у випадку наявності значення в початковому списку в кількох екземплярах перший “екземпляр” значення залишається на своєму місці, а другий, третій та ін. видаляються.

Наприклад
Виклик функції: clean_list()
Повертає:
Виклик функції: clean_list()
Повертає:
Виклик функції: clean_list()
Повертає:
Виклик функції: clean_list()
Повертає:

s=[1, 2, 1, 1, 3, 4, 5, 21, 33, 4, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5]
 
c=[]
 
for i in s:
 
    if i not in c:
 
        c.append(i)
 
print c

такой вариант не подойдет, надо проверка на тип данных, что бы 1.0 и 1 считались разными значениями

Офлайн

#6 Сен. 16, 2015 16:05:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

К сожалению, я мову не понимаю, придётся вам ждать украинца.



Офлайн

#7 Сен. 16, 2015 16:15:11

0x420
Зарегистрирован: 2015-07-26
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

я переведу:

Разработать функцию clean_list(list_to_clean), которая принимает 1 аргумент - список каких либо значений(строк, целых и чисел с плавающей точкой) любой длины, и возвращает список который состоит из тех же значений но не содержит повторов элементов. Это значит что в случае наличия значения в начальном списке в нескольких экземплярах первый экземпляр значения останется на своем месте, а второй, третий удаляются

Офлайн

#8 Сен. 16, 2015 16:26:36

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

Ну как бы есть set. Странные какие-то курсы

>>> lst = [1, 1, 1, 2, 3]
>>> set(lst)
{1, 2, 3}
>>> 

Отредактировано ayb (Сен. 16, 2015 16:28:18)

Офлайн

#9 Сен. 16, 2015 16:28:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

#!/usr/bin/env python
# -* coding: utf-8 -*-
def unique_list(lst):
    result = []
    in_lst = set()
    for i in lst:
        if i not in in_lst:
            result.append(i)
            in_lst.add(i)
    return result
s = [1, 0, "ss", 4.0, "ss", 0, 33, 4.0]
print (unique_list(s))



Офлайн

#10 Сен. 16, 2015 16:29:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

ayb
Ну как бы есть set. Странные какие-то курсы
set не сохраняет порядок!!!
Это значит что в случае наличия значения в начальном списке в нескольких экземплярах первый экземпляр значения останется на своем месте



Отредактировано FishHook (Сен. 16, 2015 16:30:11)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version