Найти - Пользователи
Полная версия: Код работает не внимательно.
Начало » Центр помощи » Код работает не внимательно.
1
Vlad_Ki
Пытаюсь решить задачку:
"Дан непустой массив целых чисел (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]

Может быть есть нюансы одного из строковых методов? Или я просто невнимательный?
Прошу помощи.
Заранее спасибо.
ampermetr
я бы сделал два списка и рассортировал в них полученные значения
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]))
Vlad_Ki
Это отлично, спасибо за совет. Ваш вариант мне нравится. Но все же хочу разобраться - что же не так с моим?
plusplus
Vlad_Ki
Это отлично, спасибо за совет. Ваш вариант мне нравится. Но все же хочу разобраться - что же не так с моим?

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

Потому что в цикле изменяете список, индексы сбиваются.
ampermetr
не уверен, но думаю что это из-за того, что идет одновременная итерация и удаление элементов, из-за чего индекс элементов сбивается
Vlad_Ki
plusplus
Потому что в цикле изменяете список, индексы сбиваются.
ampermetr
не уверен, но думаю что это из-за того, что идет одновременная итерация и удаление элементов, из-за чего индекс элементов сбивается
Блин, все же так очевидно!) Спасибо огромное.
Vlad_Ki
Кому интересно, конечный вариант сделал таким.
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)
Это мне показалось наиболее логичным.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB