Форум сайта python.su
Пытаюсь решить задачку:
"Дан непустой массив целых чисел (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]
Офлайн
я бы сделал два списка и рассортировал в них полученные значения
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
Это отлично, спасибо за совет. Ваш вариант мне нравится. Но все же хочу разобраться - что же не так с моим?
for x in stroka: if stroka.count(x) < 2: stroka.remove(x)
Офлайн
не уверен, но думаю что это из-за того, что идет одновременная итерация и удаление элементов, из-за чего индекс элементов сбивается
Отредактировано ampermetr (Фев. 26, 2016 13:00:49)
Офлайн
plusplus
Потому что в цикле изменяете список, индексы сбиваются.
ampermetrБлин, все же так очевидно!) Спасибо огромное.
не уверен, но думаю что это из-за того, что идет одновременная итерация и удаление элементов, из-за чего индекс элементов сбивается
Отредактировано Vlad_Ki (Фев. 26, 2016 15:54:27)
Офлайн
Кому интересно, конечный вариант сделал таким.
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)
Офлайн