Проблемы при запуске для l oop и добавлении элементов в пустой список в Python - PullRequest
0 голосов
/ 25 апреля 2020

Я хотел бы знать, что я делаю не так с моим кодом. Я JavaScript разработчик и сейчас учусь Python. Я создаю function, который принимает list в качестве аргумента, перебирает его и добавляет новый list с элементами типа string из предыдущего. Однако я получаю эту ошибку SyntaxError: bad input on line 4 in main.py.

Во-первых, я хотел бы знать, что я делаю неправильно. Во-вторых, как я могу это исправить?

def filter_list(arr):
  results = list()

    for x in arr:
        if isinstance(x, str):
        results.append(x)
        print(results)

filter_list([1, 2, 3, "a", "b", 4])

Ответы [ 4 ]

1 голос
/ 25 апреля 2020

Как уже упоминали другие, ваша проблема связана с отступом в вашем операторе if. Если ваша цель - получить отфильтрованный список только строк из исходного списка, а не просто распечатать список, который вы могли бы go с помощью:

def filter_list(arr):
    results = list()

    for x in arr:
        if isinstance(x, str):
            results.append(x)
    return results

Другой альтернативой будет использование популярного функционального подхода. в python и, вероятно, знакомый из javascript:

results = filter(lambda x: isinstance(x, str), arr)

В приведенном выше примере results будет итератором, поскольку filter является генератором функция, функция, для которой результаты могут быть повторены. Если вы хотите получить обратно список, вы можете добавить list(results)

0 голосов
/ 25 апреля 2020

Отступ неверен. Блоки Python начинаются с :, но требуется знать, когда они заканчиваются. Пустой блок должен иметь явный pass.

В частности, обратите внимание, что этот if имеет пустой блок без pass. (Следующая строка больше не имеет отступа, поэтому блок должен был закончиться.)

if isinstance(x, str):
results.append(x)

А также в пределах блока отступ должен быть последовательным. for - неожиданный отступ, потому что не было начального :, который позволял бы делать отступ больше.

results = list()

    for x in arr:
0 голосов
/ 25 апреля 2020
def filter_list(arr):
    results = list()

    for x in arr:
        if isinstance(x, str):
            results.append(x)
        print(results)

filter_list([1, 2, 3, "a", "b", 4])

1) Сделайте одинаковые отступы в строке 2 и строке 4. 2) Отступы result.append (x) после оператора if.

0 голосов
/ 25 апреля 2020
def filter_list(arr):

  results = list()

  for x in arr:
      if isinstance(x, str):
          results.append(x)
          print(results)

filter_list([1, 2, 3, "a", "b", 4])

Ваш интервал неверен. Этот код работает.

Проверьте интервал между утверждениями. Особенно строка 5 блок.

  • 1 отступ строки в строке 5
  • 2 отступа строки в строке 6
  • И 3 в строке 7 и 8

Отступы обычно это 4 пробела, вы можете использовать буквенные табуляции, но учтите, что вы не можете смешивать табуляции и пробелы

...