首页 > 解决方案 > 将函数应用于列表列表 - Python

问题描述

我的目标是迭代地将列表列表传递给函数,但我返回一个错误。下面的代码创建了一个随机列表。一旦生成,它就会被传递给一个单独的函数。

所以列表的列表被命名为mult_samples。我希望将它传递给一个函数。

但我不能通过整个列表列表。如何遍历所有子列表并将输出作为数组或 df 返回?

import pandas as pd
import random
import numpy as np

df = pd.DataFrame({                    
        'X' : [1.0,3.0,2.0,2.0,4.0,3.0,3.0,4.0,4.0],
    })

def randomSamples():

    A = df['X']

    n = len(df['X'])

    maxv = int(A.max())
    minv = int(A.min())

    one_sample = []

    for x in range(0, n):

        one_sample.append(random.randint(minv, maxv))

    samples = [one_sample for _ in range(10)]

    return samples

mult_samples = randomSamples()

子集 list1 和 list2

出去:

mult_samples[0] = [3, 2, 3, 3, 4, 2, 3, 3, 3]

mult_samples[1] = [1, 4, 1, 3, 3, 4, 3, 4, 2]

def func(U, m = 2, r = 0.2):

    def _maxdist(x_i, x_j):
        return max([abs(ua - va) for ua, va in zip(x_i, x_j)])

    def _phi(m):
        x = [[U[j] for j in range(i, i + m - 1 + 1)] for i in range(N - m + 1)]
        C = [len([1 for x_j in x if _maxdist(x_i, x_j) <= r]) / (N - m + 1.0) for x_i in x]
        return (N - m + 1.0)**(-1) * sum(np.log(C))

    N = len(U)

    return abs(_phi(m + 1) - _phi(m))

output_mult_samples = func(mult_samples)

#output_mult_samples = list(map(funclist, mult_samples))

print(output_mult_samples)

出去

mult_samples[0] = 0.253692959177
mult_samples[1] = 0.0397554025155

标签: pythonpandasfunctionapply

解决方案


从我从你的问题中推断出来,假设你想申请func你列表中的每个列表,你可以这样进行:

# apply the function 'func' to every LIST inside the main list
output_mult_samples = list(map(func, mult_samples))

编辑:获得func有问题的定义后,您只需将其映射到列表列表。

此外,您需要修复该功能randomSamples。到目前为止,您所做的只是one_sample在您的samples. 你应该这样做:

samples = []

for _ in range(10):
    one_sample = []
    for x in range(0, n):
        one_sample.append(random.randint(minv, maxv))
    samples.append(one_sample)

推荐阅读