Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > тест по Python - ошибка в коде


Автор: ll75 6.2.2018, 09:52
Вопрос из теста по Python:
Which of the following code samples will flatten the "irregular" list below: (choose all that apply)
Код

L = [[1, 2, 3], [4, 5], 6] to [1, 2, 3, 4, 5, 6]

Note: There may be more than one right answer.

Какой из следующих примеров кода будет сглаживать «нерегулярный» список ниже: 
Код

L = [[1, 2, 3], [4, 5], 6] в [1, 2, 3, 4, 5, 6]


Примечание: может быть более 1 правильного ответа

Пробовал и для python2 и для python3 - все 4 варианта с ошибками, наверное где-то в коде ошибся, когда набивал в редакторе. Варианты ответа:
1.
Код

g = str(L).replace('[', '').replace(']', ''
flattenedList = [int(x) for x in g.split(',') if x.strip()]

2.
Код

def flatten(L):
  for el in L:
      if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
          for sub in flatten(el):
      else:
          yield el    


3.
Код

def flatten_gen(L, ltypes=collections.Sequence):
  ltype = type(L)
  l = list(L)
  i = 0
  while i < len(l):
    while isinstance(l[i], ltypes):
        if not l[i]:
            l.pop(i)
            i -= 1
            break
        else:
            l[i:i + 1] = l[i]
    else:
        yield l[i]
    i += 1

4.
Код

import re 
def Flatten(L):
    a = str(L)
    b,crap = re.subn(r'[\[,\]]', '', a)
    c = b.split() 
    d = [int(x) for x in c]

    return d


Плз хелп ми! А то устал бороться...

Автор: ll75 6.2.2018, 10:59
Когда запускал 1 вариант:
Код

  File "./tezt.py", line 10
    else:
    ^
IndentationError: expected an indented block


2 вариант:
Код

  File "./tezt.py", line 10
    else:
    ^
IndentationError: expected an indented block


3 вариант:
Код

Traceback (most recent call last):
  File "./tezt.py", line 6, in <module>
    def flatten_gen(L, ltypes=collections.Sequence):
NameError: name 'collections' is not defined


4 вариант:
Код

  File "./tezt.py", line 10
    b,crap = re.subn(r'[\[,\]]', '', a)
                                      ^
TabError: inconsistent use of tabs and spaces in indentation


Автор: Romikgy 6.2.2018, 12:54
вам бы синтаксис питона почитать...
Цитата(ll75 @  6.2.2018,  09:59 Найти цитируемый пост)
Когда запускал 1 вариант:

нет else в этом примере

Цитата(ll75 @  6.2.2018,  08:52 Найти цитируемый пост)
g = str(L).replace('[', '').replace(']', ''

скобки нет в конце..


Автор: ll75 6.2.2018, 13:36
Спасибо, скобку поставил и первый вариант преобразовывает в 
Код

[1, 2, 3, 4, 5, 6]


а из оставшихся 3 вариантов есть правильные еще (которые тоже преобразовывают)?

Автор: Romikgy 6.2.2018, 13:45
Код

import re 
def Flatten(L):
    a = str(L)
    b,crap = re.subn(r'[\[,\]]', '', a)
    c = b.split() 
    d = [int(x) for x in c]
    return d
L = [[1, 2, 3], [4, 5], 6]
print Flatten(L)


Добавлено через 1 минуту и 11 секунд
Код

import collections
def flatten_gen(L, ltypes=collections.Sequence):
  ltype = type(L)
  l = list(L)
  i = 0
  while i < len(l):
    while isinstance(l[i], ltypes):
        if not l[i]:
            l.pop(i)
            i -= 1
            break
        else:
            l[i:i + 1] = l[i]
    else:
        yield l[i]
    i += 1
L = [[1, 2, 3], [4, 5], 6]
print [i for i in flatten_gen(L)]


Добавлено через 3 минуты и 21 секунду
Код

import collections
def flatten(L):
  for el in L:
      if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
          for sub in flatten(el):
            yield sub
      else:
          yield el   
L = [[1, 2, 3], [4, 5], 6]
print [i for i in flatten(L)]

Автор: Romikgy 6.2.2018, 14:16
Код

L = [[1, 2, 3], [4, 5], 6]
print [int(i) for i  in ';'.join([str(z) if not isinstance(z, (list, tuple)) else ';'.join([str(q)  for q in z]) for z in L]).split(';')]

Автор: ll75 6.2.2018, 15:50
Спасибо за помощь огромное!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)