作为一个例子,我的列表是:
[25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799]
Run Code Online (Sandbox Code Playgroud)
我正在寻找最接近的值的索引11.5.我尝试了其他方法,如二进制搜索,bisect_left但它们不起作用.
我无法对此数组进行排序,因为该值的索引将用于类似的数组以获取该索引处的值.
我正在寻找某种"多米诺排序"算法,该算法根据后续项目的"切线"边的相似性对双面项目列表进行排序.
假设以下列表中的项目由2元组表示:
>>> items
[(0.72, 0.12),
(0.11, 0.67),
(0.74, 0.65),
(0.32, 0.52),
(0.82, 0.43),
(0.94, 0.64),
(0.39, 0.95),
(0.01, 0.72),
(0.49, 0.41),
(0.27, 0.60)]
Run Code Online (Sandbox Code Playgroud)
目标是对该列表进行排序,使得每两个后续项目(损失)的切线末端的平方差的总和最小:
>>> loss = sum(
... (items[i][1] - items[i+1][0])**2
... for i in range(len(items)-1)
... )
Run Code Online (Sandbox Code Playgroud)
对于上面的示例,这可以通过仅处理所有可能的排列来计算,但是对于具有更多项的列表,这变得很快变得不可行(O(n!)).
如下所示,逐步选择最佳匹配的方法
def compute_loss(items):
return sum((items[i][1] - items[i+1][0])**2 for i in range(len(items)-1))
def domino_sort(items):
best_attempt = items
best_score = compute_loss(best_attempt)
for i in range(len(items)):
copy = [x for x in items]
attempt = [copy.pop(i)]
for j in range(len(copy)): …Run Code Online (Sandbox Code Playgroud) 我有两个numpy数组,比如X=[x1,x2,x3,x4], y=[y1,y2,y3,y4].其中三个元素很接近,第四个元素可能接近或不接近.
喜欢:
X [ 84.04467948 52.42447842 39.13555678 21.99846595]
y [ 78.86529444 52.42447842 38.74910101 21.99846595]
Run Code Online (Sandbox Code Playgroud)
或者它可以是:
X [ 84.04467948 60 52.42447842 39.13555678]
y [ 78.86529444 52.42447842 38.74910101 21.99846595]
Run Code Online (Sandbox Code Playgroud)
我想定义一个函数来查找两个数组中的相应索引,如第一种情况:
y[0]对应X[0],y[1]对应X[1],y[2]对应X[2],y[3] 相当于 X[3]在第二种情况下:
y[0]对应X[0],y[1]对应X[2],y[2] 相当于 X[3] y[3]对应于X[1].我不能写一个完全解决问题的功能,请帮忙.
mylist = [1, 2, 3, 4, 5, 6, 7, 9, 10]
mynumber = 8
Run Code Online (Sandbox Code Playgroud)
我想找到最接近mynumber的列表中的数字.我怎么能写一个可以做到这一点的函数?
我还是初学者,所以我怎么能只用循环和if语句来做呢?
与列表中给出的数字相比,您将如何找到最接近的数字?
这是我迄今为止尝试过的,但没有成功:
setted_list = [2, 9, 6, 20, 15]
value_chosen = 17
while True:
final_value = setted_list[0]
if setted_list[1] - value_chosen < setted_list[0] - value_chosen:
final_value = setted_list[1]
if setted_list[2] - value_chosen < setted_list[1] - value_chosen:
final_value = setted_list[2]
if setted_list[3] - value_chosen < setted_list[2] - value_chosen:
final_value = setted_list[3]
if setted_list[4] - value_chosen < setted_list[3] - value_chosen:
final_value = setted_list[4]
print(final_value)
Run Code Online (Sandbox Code Playgroud)
我的输出始终是setted_list[2]. 我的算法哪里出错了?
我正在制作一些代码,允许我从列表中选择最接近的数字,我已设法做到这一点.但是当找到最接近的数字并且它超过'myNumber'时,我希望python在它之前打印出列表中的数字.
例如;
如果我有一个清单;
TwoN = [1,2,4,8,16,32,64,128,256,512, 1024, 2048, 4096, 8192]
Run Code Online (Sandbox Code Playgroud)
和
myNumber = 30
Run Code Online (Sandbox Code Playgroud)
我希望python打印16而不是32
这是我到目前为止所做的代码......
TwoN = []
for i in range(12):
TwoN.append(2**i)
print(TwoN)
myNumber = 30
closest = TwoN[0]
for i in range(1, len(TwoN)):
if abs(TwoN[i] - myNumber) < abs(closest - myNumber):
closest = TwoN[i];
Sum = myNumber - closest
if Sum < 0:
closest = TwoN[(i-1)]
print(closest)
else:
print(closest)
Run Code Online (Sandbox Code Playgroud)
当myNumber = 30时,程序将输出1024,当我希望它输出16 ..
任何帮助表示赞赏谢谢
这里谈论Python 3。
我希望将数字四舍五入为一组给定的可能变化的值
假设value_set = [x, y, z]为了这个例子,x, y, z = 1, 3.12, 4我正在寻找一个函数,它将给定的浮点四舍五入到最接近的数字
custom_round(0) --> 1
custom_round(2.7) --> 3.12
请注意,它应该足够通用,value_set长度也会有所不同