python - 通过固定一个索引并与同一数组的每个其他索引进行比较来编写循环
问题描述
对于一个数组,我想修复一个索引值并将其与其他所有索引值进行比较。例如,修复 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],因为它们都更大。
解决方案
代码:
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]]
推荐阅读
- xml - 用于重新启动计算机的 PowerShell/XML toast 通知不起作用。我可以使用特定的 XML 命令吗?
- python - 如何在python中删除数据框中单词的完全匹配?
- vue.js - vue cli 项目不会运行 - 'babel-code-frame'
- python - pandas Groupby求和和连接
- r - R中社区检测算法的不同模块化分数
- swift - 如果 Preview Content 文件夹中有 SwiftUI Previews 的代码,为什么存档会失败?
- nginx - Magento 2 与 Varnish 和 Nginx 作为 SSL 终止 - 后端服务器正在服务
- scikit-learn - TypeError: float() 参数必须是字符串或数字,而不是我使用 model.fit(X_train,y_train) 时的“方法”
- reactjs - 元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“typeof”
- jgitflow-maven-plugin - jgitflow-maven-plugin 总是产生合并冲突