1

Тема: Типи даних

Вітання!
Є така задачка

Прихований текст

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

Наприклад
Виклик функції: clean_list([1, 1.0, '1', -1, 1])
Повертає: [1, 1.0, '1', -1]
Виклик функції: clean_list(['qwe', 'reg', 'qwe', 'REG'])
Повертає: ['qwe', 'reg', 'REG']
Виклик функції: clean_list([32, 32.1, 32.0, -123])
Повертає: [32, 32.1, 32.0, -123]
Виклик функції: clean_list([1, 2, 1, 1, 3, 4, 5, 4, 6, '2', 7, 8, 9, 0, 1, 2, 3, 4, 5])
Повертає: [1, 2, 3, 4, 5, 6, '2', 7, 8, 9, 0]

Робив так:
- функція передає всі різні(які не повторюються) значення вхідного списку в інший список, а ті що повторюються присвоїти  пусту стрічку..
- потім перевірити (іншим циклом) якщо значення не дорівнює пустій стрічці, значення переприсвоїти в "чистий цикл"..

Але виникла одна проблема... Функція визначає що 1.0 == 1, а мені треба зробити щоб це було 1.0!==1..
Знайшов таку вбудовану функцію

isinstance(x, y)


- перевіряє, чи є x значенням типу y.
Аде воно працює лише в такому вигляді

isinstance(a, str)


Власне питання. Як мені взнати якого типу даних є змінна?

Мій код функції
def clean_list(list_to_clean):
    list = list_to_clean
    clear_list = []
    for i in range(len(list_to_clean)-1):
        for j in range(i+1, len(list_to_clean)):
            if list_to_clean[i] == list_to_clean[j] :
                list[j] = ''
    j = 0
    for i in range(len(list)):
        if list[i]!='':
            clear_list=clear_list + [list[i]]
            j = j +1
    return clear_list

Чи можливо підкажіть інший алгоритм...

2

Re: Типи даних

А що заважає зробити 2 вкладених цикли, і порівнюючи елементи кожний з кожним якщо унікальне - класти в інший масив(список) а як повторюється то нічого не робити?
код трикутником (щоб не робити подвійне порівняння а[1]=a[3], a[3]=a[1])

for (i=0; i<count; i++){
  for(j=i; j<count; j++) {
    ...
Подякували: Q-bart1

3 Востаннє редагувалося quez (20.02.2015 18:57:18)

Re: Типи даних

Q-bart написав:

Знайшов таку вбудовану функцію

isinstance(x, y)


- перевіряє, чи є x значенням типу y.
Аде воно працює лише в такому вигляді

isinstance(a, str)


Власне питання. Як мені взнати якого типу даних є змінна?

Там, де є isinstance, має бути і getinstance.

Подякували: Q-bart1

4

Re: Типи даних

До ваших послуг оператор is:

   2 is 2.0
=> False
   2 == 2.0
=> True
Подякували: quez, Q-bart2

5

Re: Типи даних

Chemist-i написав:

А що заважає зробити 2 вкладених цикли, і порівнюючи елементи кожний з кожним якщо унікальне - класти в інший масив(список) а як повторюється то нічого не робити?
код трикутником (щоб не робити подвійне порівняння а[1]=a[3], a[3]=a[1])

for (i=0; i<count; i++){
  for(j=i; j<count; j++) {
    ...

А як бути якщо символ лише 1..
Проте мені і так, з допомогою опреатора is працює чудово... Програма пройшла всі тести..

6

Re: Типи даних

Q-bart написав:
Chemist-i написав:

А що заважає зробити 2 вкладених цикли, і порівнюючи елементи кожний з кожним якщо унікальне - класти в інший масив(список) а як повторюється то нічого не робити?
код трикутником (щоб не робити подвійне порівняння а[1]=a[3], a[3]=a[1])

for (i=0; i<count; i++){
  for(j=i; j<count; j++) {
    ...

А як бути якщо символ лише 1..
Проте мені і так, з допомогою опреатора is працює чудово... Програма пройшла всі тести..

Символ чи елемент списку?

7

Re: Типи даних

Chemist-i написав:
Q-bart написав:
Chemist-i написав:

А що заважає зробити 2 вкладених цикли, і порівнюючи елементи кожний з кожним якщо унікальне - класти в інший масив(список) а як повторюється то нічого не робити?
код трикутником (щоб не робити подвійне порівняння а[1]=a[3], a[3]=a[1])

for (i=0; i<count; i++){
  for(j=i; j<count; j++) {
    ...

А як бути якщо символ лише 1..
Проте мені і так, з допомогою опреатора is працює чудово... Програма пройшла всі тести..

Символ чи елемент списку?

елемент списку.