首页 > 解决方案 > 通过固定一个索引并与同一数组的每个其他索引进行比较来编写循环

问题描述

对于一个数组,我想修复一个索引值并将其与其他所有索引值进行比较。例如,修复 x[0],如果 x[1]、x[2]、...、x[n] 中的任何一个大于 x[0],则返回其索引值。然后修复 x[1],返回任何大于 x[1] 的 x[0]、x[2]、...、x[n] 等等......所以对于每个 i,它应该返回数组。这叫什么,是否有一个特殊的循环,我不知道如何编码?

x = np.array([1,4,9,4,5,5,2])
n = len(x) 
for i in range(n-1):
    for j in range(n-1):
        if x[j] > x[i]:
            print(x[i:j])     

这返回

[1 4]
[1 4 9]
[1 4 9 4]
[1 4 9 4 5]
[4]
[4 9 4]
[4 9 4 5]
[]
[4]
[4 5]
[]
[]].

但是由于 x[0] = 1,所以 x 中的每个值都大于这个,所以它应该返回 [1,2,3,4,5,6]。

对于 x[1] = 4,它应该只返回 [2,4,5],因为它们都更大。

标签: pythonloops

解决方案


代码:

x = [1,4,9,4,5,5,2]
for i in range(len(x)):
    print([j for j in range(len(x)) if x[j]>x[i]])

结果:

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

如果你必须使用 numpy:

代码:

import numpy as np
x = np.array([1,4,9,4,5,5,2])
for i in range(len(x)):
    print([j for j in range(len(x)) if x[j]>x[i]])

结果:

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

如果您想将其用作函数:

代码:

def foo(dic):
    return [[j for j in range(len(dic)) if dic[j]>dic[i]] for i in range(len(dic))]

print(foo([1,4,9,4,5,5,2]))

结果:

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

推荐阅读