python - 比较两个列表中的值并从第三个列表中返回相似或最接近的值
问题描述
我想在 v 中找到 j 的相似值并返回 x。当 j 中的值不等于 v 时,我会喜欢检测 v 中 j 值之间的 2 值的代码。所以如果 j 介于 v1 和 v2 之间,我希望代码返回max(x1,x2)- ( ((j-v1)/(v2-v1))*(max(x1,x2)-min(x1,x2)))
v= [100,200,300,400,500,600,700,800,900,1000,1100]
x= [67,56,89,21,90,54,38,93,46,17,75]
j= [200,300,400,460,500,600,700,800,870,900,950]
for i in range(len(v)-1):
if v[i] > j and V[i+1] < j:
p = max(x[i],x[i+1])- ( ((j-v[i])/(v[i+1]-v[i]))*(max(x[i],x[i+1])-min(x[i],x[i+1])))
elif v[i] ==j:
b= x[i]
print(p,b)
"""
n = [x[i] for i, v_ele in enumerate(v) if v_ele in j]
p= [x[i] for i, v_ele in enumerate(v) if v_ele > j and v_ele
print(n)
"""
我会喜欢我的答案
[56,89,21,48.6,90,54,38,93,60.1,46,31.5]
解决方案
我们可以使用以下两个辅助函数来做到这一点。请注意,我认为问题中您的预期输出中的第四个元素可能存在轻微错误 - 我得到了那个值,62.4
而你有48.6
.
代码:
def get_v_indx(j_ele, v):
if j_ele in v:
return v.index(j_ele)
else:
for i, ele in enumerate(v):
if ele > j_ele:
return i-1+(j_ele-v[i-1])/(ele-v[i-1])
def get_x_ele(i, x):
try:
return x[i]
except TypeError:
return x[int(i)] + (x[int(i)+1]-x[int(i)])*(i-int(i))
用法:
>>> [get_x_ele(get_v_indx(j_ele, v), x) for j_ele in j]
[56, 89, 21, 62.4, 90, 54, 38, 93, 60.1, 46, 31.5]
推荐阅读
- wordpress - WP 我想创建一个由多个查询的合并结果组成的单个数组
- r - 如何根据 R 中部分匹配列名的行值计算行总和
- java - 请求回复未来
> 没有映射,而是映射到 ArrayList - python - Selenium 中的代理实现
- amazon-web-services - 如何运行批处理转码脚本?
- android - READ_EXTERNAL_STORAGE 不适用于 Android 10
- javascript - 自动删除 session-file-store 的 session 文件
- linux - 无法执行 docker 容器制作 OCI 运行时 exec 失败的错误:exec failed: container_linux.go:346: 启动容器进程导致
- .net - .NET CORE - ApplicationBuilder Map() 路径可以区分大小写
- powershell - Powershell Find-Module 找不到所有版本