Python:如何避免循环规范化列表列表?

时间:2016-05-20 19:56:09

标签: python list loops numpy

我有一个包含X个用户数据的列表N。我希望得到每个用户的相对频率分布。

l1  = list()
for i in range(0,N):
    tmp = np.array(X[i])
    tmp = tmp[tmp < tr]
    tmp = np.histogram(tmp, x)
    l1.append(tmp[0]/sum(tmp[0]))

有没有办法避免这种循环?

3 个答案:

答案 0 :(得分:0)

我认为我得到了你要求的内容:如何避免使用range并避免诉诸l1。如果是这种情况,您可以使用发电机,试试这个:

def iter_on_items(X):
    for item in X:
        tmp = np.array(item)
        tmp = tmp[tmp < tr]
        tmp = np.histogram(tmp, x)
        yield tmp[0]/sum(tmp[0])

然后你需要通过这样做来消费它:

for result in iter_on_items(X):
    print(result)

答案 1 :(得分:0)

使用map怎么样?这是函数内置函数,它接受函数和迭代作为输入,并将函数应用于迭代中的每个元素。我直接翻译了您上面的内容,但您可以将这些内容合并到较少的map次调用中。

l1 = list(map(lambda a: np.array(a), X))
l1 = list(map(lambda a: a[a < tr], l1))
l1 = list(map(lambda a: np.histogram(a, X), l1))
l1 = list(map(lambda a: a[0]/sum(a[0]), l1))

答案 2 :(得分:0)

使用map

def op(A):
    tmp = np.array(A)
    tmp = tmp[tmp < tr]
    tmp = np.histogram(tmp, x)
    return tmp[0]/sum(tmp[0])

# creates a generator
map(op, X)
# or, to get a list
l1 = list(map(op, X))