Как написать итеративную функцию - PullRequest
0 голосов
/ 17 июня 2020

У меня есть следующий for-l oop:

dfs_fixed = []
for i in range(len(dfs)):
    dfs_fixed.append(dfs[i][dfs[i]['paragraph'].notnull()].reset_index(drop=True))

, где dfs - это список фреймов данных.

Мне нужно выполнить функцию из Это. Вот мое решение:

def append_to_list(data_list, function):
    data = []
    for i in range(len(customer_data_set)):
        data.append(function)
    return data

Но это не работает. Когда я запускаю:

dfs_fixed = append_to_list(dfs, dfs[i][dfs[i]['paragraph'].notnull()].reset_index(drop=True))

, я получаю:

NameError: name 'i' is not defined

Есть ли способ создать подходящую функцию append_to_list ?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

i определяется только внутри функции. Вам нужно передать dfs только в качестве аргумента вместе с функцией, которая принимает элемент data_list в качестве аргумента

dfs_fixed = append_to_list(dfs, lambda d: d[d['paragraph'].notnull()].reset_index(drop=True))

и определяет функцию примерно как

def append_to_list(data_list, f):
    data = []
    for d in data_list:
        data.append(f(d))
    return data
0 голосов
/ 17 июня 2020

Две вещи.

Во-первых, при запуске

dfs_fixed = append_to_list(dfs, dfs[i][dfs[i]['paragraph'].notnull()].reset_index(drop=True))

вы уже используете переменную i. Если он еще не определен, вы еще не можете его использовать.

Кроме того, в вашем примере вы используете циклы C -style for вместо Python -style for циклы.

Вам не нужно:

for i in range(len(l)):
     print(l[i])

Просто выполните:

for i in l:
     print(i)

Если вам нужны и значение, и индекс, выполните:

for i, v in enumerate(l):
     print('value: %s; index: %s' % (v, i))
...