Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2016 11:29:02

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Код работает не внимательно.

Пытаюсь решить задачку:
"Дан непустой массив целых чисел (X). В этой задаче вам нужно вернуть массив, состоящий только из неуникальных элементов данного массива. Для этого необходимо удалить все уникальные элементы (которые присутствуют в данном массиве только один раз). Для решения этой задачи не меняйте оригинальный порядок элементов. Пример: , где 1 и 3 неуникальные элементы и результат будет ."

Пока с функцией и входными данными типа list не стал заморачиваться. Сделал простой код, которому задаю числа по порядку и он их помещает в список и удаляет неуникальные.

stroka = []
while True:
	_4islo = input("Введите числа:")
	if _4islo:
		stroka += [int(_4islo)]
	else:
		for x in stroka:
			if stroka.count(x) < 2:
				stroka.remove(x)
		break
print (stroka)
Но удаляет не все, почему то и тенденцию отследить не могу:
Введите числа:1
Введите числа:2
Введите числа:3
Введите числа:44
Введите числа:44
Введите числа:55
Введите числа:55
Введите числа:66
Введите числа:66
Введите числа:4
Введите числа:5
Введите числа:6
Введите числа:77
Введите числа:88
Введите числа:99
Введите числа:7
Введите числа: 
[2, 44, 44, 55, 55, 66, 66, 5, 77, 99]

Может быть есть нюансы одного из строковых методов? Или я просто невнимательный?
Прошу помощи.
Заранее спасибо.



lol developer

Офлайн

#2 Фев. 26, 2016 12:20:09

ampermetr
Зарегистрирован: 2016-01-27
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

Код работает не внимательно.

я бы сделал два списка и рассортировал в них полученные значения

def main(lst):
    unique = []
    not_unique = []
    for item in lst:
        if not item in unique:
            unique.append(item)
        else:
            not_unique.append(item)
    return not_unique
    
if __name__ == '__main__':    
    print (main([1,2,3,44,44,55,55,66,66,4,5,6,77,88,99,7]))

Офлайн

#3 Фев. 26, 2016 12:44:04

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Код работает не внимательно.

Это отлично, спасибо за совет. Ваш вариант мне нравится. Но все же хочу разобраться - что же не так с моим?



lol developer

Офлайн

#4 Фев. 26, 2016 12:54:50

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Код работает не внимательно.

Vlad_Ki
Это отлично, спасибо за совет. Ваш вариант мне нравится. Но все же хочу разобраться - что же не так с моим?

for x in stroka:
    if stroka.count(x) < 2:
        stroka.remove(x)

Потому что в цикле изменяете список, индексы сбиваются.



Офлайн

#5 Фев. 26, 2016 13:00:24

ampermetr
Зарегистрирован: 2016-01-27
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

Код работает не внимательно.

не уверен, но думаю что это из-за того, что идет одновременная итерация и удаление элементов, из-за чего индекс элементов сбивается

Отредактировано ampermetr (Фев. 26, 2016 13:00:49)

Офлайн

#6 Фев. 26, 2016 15:53:40

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Код работает не внимательно.

plusplus
Потому что в цикле изменяете список, индексы сбиваются.
ampermetr
не уверен, но думаю что это из-за того, что идет одновременная итерация и удаление элементов, из-за чего индекс элементов сбивается
Блин, все же так очевидно!) Спасибо огромное.



lol developer

Отредактировано Vlad_Ki (Фев. 26, 2016 15:54:27)

Офлайн

#7 Фев. 26, 2016 16:39:04

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Код работает не внимательно.

Кому интересно, конечный вариант сделал таким.

stroka = []
unik = []
while True:
	_4islo = input("Введите числа:")
	if _4islo:
		stroka += [int(_4islo)]
	else:
		for x in stroka:
			if stroka.count(x) < 2:
				unik += [x]
		for y in unik:
			stroka.remove(y)
		break 
print (stroka)
Это мне показалось наиболее логичным.



lol developer

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version